我正在尝试使用 JNAerator 从 typedef 指令生成的接口,但我找不到这样做的方法:
.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
使用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);
我究竟做错了什么?