Java 句柄的JNA等价物*
我必须使用第三方dll中定义的c函数Java 句柄的JNA等价物*,java,java-native-interface,jna,Java,Java Native Interface,Jna,我必须使用第三方dll中定义的c函数 __declspec(dllimport) Init(DWORD id,HANDLE* handle); Jnabaile非常友好,生成了以下方法签名 public static native int Init(int id,PointerByReference handle); 并将其用作 public interface Dll extends Library { public Dll _dll = (Dll)Native.LoadLibra
__declspec(dllimport) Init(DWORD id,HANDLE* handle);
Jnabaile非常友好,生成了以下方法签名
public static native int Init(int id,PointerByReference handle);
并将其用作
public interface Dll extends Library
{
public Dll _dll = (Dll)Native.LoadLibrary("dll_name");
public int Init(int id,PointerByReference handle);
}
public void init()
{
long hwnd = 0;
LongByReference lbr = new LongByRefrence(hwnd);
PointerByReference pbr = new PointerByReference();
pbr.setPointer(lbr.getPointer());
int ret = _dll.init(0x01,pbr);
}
但是这会使JVM崩溃。。有人能告诉我在JNA中映射void**的合适方法吗
PointerByReference.getValue()
提供被调用方“返回”的值。这是可以用来初始化句柄值的值。无需“初始化”指针引用
public void init()
{
PointerByReference pbr = new PointerByReference();
int ret = _dll.init(0x01,pbr);
HANDLE handle = new HANDLE(pbr.getValue());
}
我试过了,但结果还是一样。JVM崩溃,说异常访问违规(0xc0000005)
pbr.getValue()
null?如果\u dll.init()
返回一个无效值,您当然不应该使用它。jvm在\u dll.init()
行本身上崩溃。。。到目前为止,我使用JNI成功地使用了这个dll,并且工作得非常好。。也许我会让JNA再试一次,timeIsInit()
期待它的参数有什么特别之处?句柄*
是否应该以某种方式初始化?没有句柄
是由Init()初始化的。下面是我正在使用的jni代码HANDLE-hwnd;int-ret=Init(id和hwnd)
其中id
作为参数传递给JNI函数,并将hwnd
转换为long
并返回给java。