假设我有一个带有单个导出方法的C ++ DLL,例如:
CustomerProcessor* getInstance();
即。它只返回实际包含我需要调用的方法的类的实例。
我知道我可以使用JNA(扩展com.sun.jna.Library)将getInstance()方法映射到Java中的Class,将返回的CustomerProcessor实例存储在com.sun.jna.Pointer中。
然后我可以以某种方式将它映射到CustomerProcessor类,以便我可以调用它的方法(如果是,如何)?
答案 0 :(得分:2)
对于任何任意type* function()
定义,您可以使用JNA将方法映射为返回com.sun.jna.Pointer
,但您将无法从JNA调用C ++对象上的方法。
一个简单的解决方法是编写一个C接口库,它只是为你调用对象的方法...所以如果你有一个成员函数foo()
,你可以从C ++导出一个C方法代码:
extern "C" void bar(type* var){
var->foo();
}
显然这会为你增加一些工作......但我怀疑转换到JNI的开销大致相同。
答案 1 :(得分:1)
JNAerator(http://code.google.com/p/jnaerator/)可能会帮助您完成所要求的工作。它对demangling和vtable访问有一些支持(调用* this方法所需)。