首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JNAerator --使用ty胡枝子f生成的接口

JNAerator --使用ty胡枝子f生成的接口
EN

Stack Overflow用户
提问于 2012-07-05 10:36:01
回答 2查看 1.5K关注 0票数 1

我正在尝试使用一个由JNAerator从ty清晰度指令生成的接口,但我找不到这样做的方法:

.h文件中的函数是:

代码语言:javascript
复制
MyClass::Initialize(LPCWSTR path);

头文件还包括原始的ty对联f指令:

代码语言:javascript
复制
typedef __nullterminated CONST WCHAR *LPCWSTR, *PCWSTR;

JNAerator生成:

方法:

代码语言:javascript
复制
public native int Initialize(LPCWSTR path);

接口:

代码语言:javascript
复制
/// Undefined type
/// Undefined type
public static interface LPCWSTR {

};

和类:

代码语言:javascript
复制
/// 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$);
        }
    }

问题是,我不知道如何使用PointerLPCWSTR接口(使用字符串)实例化对象LPCWSTR,以便将其传递给Initialize方法。

我该怎么做?

更新:

我修改了.h文件以使用wchar_t*

代码语言:javascript
复制
MyClass::Initialize(wchar_t* path)

JNAerator生成的方法如下:

代码语言:javascript
复制
public native int Initialize(Pointer<Character > path);

所以我这样称呼它:

代码语言:javascript
复制
MyClass factory = new MyClass();
Pointer<Character> path = org.bridj.Pointer.pointerToWideCString("dlls");
factory.Initialize(path);

问题是,我得到了以下例外:

代码语言:javascript
复制
java.lang.UnsatisfiedLinkError: main.MyClass.Initialize(Lorg/bridj/Pointer;)I

在这一行:

代码语言:javascript
复制
factory.Initialize(path);

我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2012-07-22 18:21:35

UnsatisfiedLinkError表示您的本机Initialize方法不受BridJ绑定。

这个绑定是由CPPObject的构造函数完成的(我假设您有一个继承自它的JNAerated MyClass类),任何绑定失败都会导致控制台中的错误日志(在任何情况下,您可以使用BRIDJ_VERBOSE=1环境变量增加日志的冗长性)。

另外,请注意,您的MyClass应该有一个@Library("mylibrary")注释,以便让它知道在哪里找到适当的库(.dll、.so或.dylib),或者应该是具有这种注释的类的内部类。这通常是JNAerated类的情况,但如果不是,请在NativeLibs4Java跟踪器中报告一个bug。

票数 1
EN

Stack Overflow用户

发布于 2012-07-27 13:22:18

我也有这个问题。佐夫的回应让我走上了正确的道路。我更改了JNAerator库选项以匹配我的DLL名称(例如,-library MyLib MyLib.dll MyLib.h)。帮我修好了。还有关于库选项这里的更多信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11342579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档