7

假设我有一个带有单个导出方法的 C++ DLL,例如:

CustomerProcessor* getInstance();

即它只是返回一个实际包含我需要调用的方法的类的实例。

我知道我可以使用 JNA(扩展 com.sun.jna.Library)将 getInstance() 方法映射到 Java 中的类,将返回的 CustomerProcessor 实例存储在 com.sun.jna.Pointer 中。

然后我可以以某种方式将其映射到 CustomerProcessor 类,以便我可以调用它的方法(如果可以,如何调用)?

4

2 回答 2

3

对于任何任意type* function()定义,您都可以使用 JNA 将方法映射为返回 a com.sun.jna.Pointer,但您将无法从 JNA 调用 C++ 对象上的方法。

一个简单的解决方法是编写一个 C 接口库,它只是为您调用对象上的方法......所以如果您有一些成员函数foo(),您可以从 C++ 代码中导出 C 方法:

extern "C" void bar(type* var){
   var->foo();
}

显然这会为您增加一些工作......但我怀疑切换到JNI的开销大致相同。

于 2009-12-10T14:06:29.863 回答
1

JNAerator可能有助于做你所要求的。它有一些对去重和 vtable 访问的支持(调用 *this 方法所必需的)。

于 2011-12-14T18:31:29.313 回答