3

サードパーティの dll で定義された ac 関数を使用する必要があります

__declspec(dllimport) Init(DWORD id,HANDLE* handle);

JNAerate は、以下のメソッド シグネチャを生成するのに十分親切でした....

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でボイド**をマップする適切な方法を教えてください。

4

1 に答える 1

0

PointerByReference.getValue()呼び出し先によって「返された」値を提供します。これは、HANDLE 値を初期化するために使用できる値です。を「初期化」する必要はありませんPointerByReference

public void init()
{
     PointerByReference pbr = new PointerByReference();
     int ret = _dll.init(0x01,pbr);
     HANDLE handle = new HANDLE(pbr.getValue());
}
于 2012-12-30T04:40:48.380 に答える