1、jna 調用公司動態庫老退出 退出碼是0xc0000409,網上查是 溢出,於是編一個debug模式動態庫來調試
2、
報這個錯,網上查 與回調函數的調用約定方式有關 也就是__stdcall __declspec
看 dll 代碼,導出函數都是 __declspec,回調函數是__stdcall
功夫不負有心人 終於找到回調函數是__stdcall的處理方法
-
package com.jna.dll;
-
-
import com.sun.jna.Pointer;
-
import com.sun.jna.win32.StdCallLibrary.StdCallCallback;
-
-
/**
-
* @author Administrator
-
* 定義回調函數接口並繼承StdCallCallback
-
* 必須繼承自com.sun.jna.Callback接口 (如果回調函數是以stdcall輸出,有時候可能引起jvm崩潰,
-
* 可以改成繼承StdCallCallback接口試試,)
-
子接口必須定義單個公有方法或一個名為callback的公有方法。必須持有到回調對象的一個存活引用。一個回調應該不拋出異常。
-
*/
-
public interface CallBack extends StdCallCallback {
-
void JMp4Server_RegCallBack(int UserID, int MP4BackCode,Pointer pData, int dwDataSize);
-
}
https://blog.csdn.net/little__superman/article/details/89326526
3、另外 注意:要調用的DLL位數要與JDK位數相同,否則無法調用。
java就是ok,以后全this