我试图通过JNAerator从一个typedef指令使用生成的接口,但我不能找到一个方法来做到这一点生成的使用接口:JNAerator typedef中
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
方法。
我该怎么做?
UPDATE:
我修改.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);
我在做什么错?
上面的所有行(除了描述我使用类的方式的代码外)都来自JNAerator生成的类。我也检查了@Library注释,并没有问题。我忘了添加这样一个事实,即所提到的异常是在这一行中引发的:factory.Initialize(path); – 2012-07-25 17:12:53