jna StdCallCallback 回調問題查證


1、jna 調用公司動態庫老退出 退出碼是0xc0000409,網上查是 溢出,於是編一個debug模式動態庫來調試

2、

 

 

報這個錯,網上查 與回調函數的調用約定方式有關 也就是__stdcall  __declspec

看 dll 代碼,導出函數都是 __declspec,回調函數是__stdcall

 

功夫不負有心人 終於找到回調函數是__stdcall的處理方法

  1. package com.jna.dll;
  2.  
  3. import com.sun.jna.Pointer;
  4. import com.sun.jna.win32.StdCallLibrary.StdCallCallback;
  5.  
  6. /**
  7. * @author Administrator
  8. * 定義回調函數接口並繼承StdCallCallback
  9. * 必須繼承自com.sun.jna.Callback接口 (如果回調函數是以stdcall輸出,有時候可能引起jvm崩潰,
  10. * 可以改成繼承StdCallCallback接口試試,)
  11. 子接口必須定義單個公有方法或一個名為callback的公有方法。必須持有到回調對象的一個存活引用。一個回調應該不拋出異常。
  12. */
  13. public interface CallBack extends StdCallCallback {
  14. void JMp4Server_RegCallBack(int UserID, int MP4BackCode,Pointer pData, int dwDataSize);
  15. }

https://blog.csdn.net/little__superman/article/details/89326526

 

 

 

 

3、另外 注意:要調用的DLL位數要與JDK位數相同,否則無法調用。

 

java就是ok,以后全this

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM