typedef命令からJNAeratorによって生成されたインターフェイスを使用しようとしていますが、それを行う方法が見つかりません。
.hファイルの関数は次のとおりです。
MyClass::Initialize(LPCWSTR path);
ヘッダーファイルには、元のtypedef命令も含まれています。
typedef __nullterminated CONST WCHAR *LPCWSTR, *PCWSTR;
JNAeratorは以下を生成します:
方法:
public native int Initialize(LPCWSTR path);
インターフェース:
/// Undefined type
/// Undefined type
public static interface LPCWSTR {
};
そしてクラス:
/// C type : WCHAR*
public Pointer<Short > LPCWSTR() {
try {
return (Pointer<Short >)BridJ.getNativeLibrary("dlls").getSymbolPointer("LPCWSTR").as(DefaultParameterizedType.paramType(Pointer.class, Short.class)).get();
}catch (Throwable $ex$) {
throw new RuntimeException($ex$);
}
}
/// C type : WCHAR*
public MainLibrary LPCWSTR(Pointer<Short > LPCWSTR) {
try {
{
BridJ.getNativeLibrary("dlls").getSymbolPointer("LPCWSTR").as(DefaultParameterizedType.paramType(Pointer.class, Short.class)).set(LPCWSTR);
return this;
}
}catch (Throwable $ex$) {
throw new RuntimeException($ex$);
}
}
LPCWSTR
問題は、Stringを使用Pointer
してオブジェクトをインスタンス化し、メソッドLPCWSTR
に渡すことができるようにする方法がわからないことInitialize
です。
これどうやってするの?
アップデート:
使用するように.hファイルを変更しましたwchar_t*
:
MyClass::Initialize(wchar_t* path)
JNAeratorは、次のようなメソッドを生成しました。
public native int Initialize(Pointer<Character > path);
だから私はそれをこのように呼んだ:
MyClass factory = new MyClass();
Pointer<Character> path = org.bridj.Pointer.pointerToWideCString("dlls");
factory.Initialize(path);
問題は、次の例外が発生することです。
java.lang.UnsatisfiedLinkError: main.MyClass.Initialize(Lorg/bridj/Pointer;)I
この行で:
factory.Initialize(path);
私は何が間違っているのですか?