这个问题的意思是询问如何使用JNA调用C ++实例方法,这是可能的,但是您将不得不做一些工作。特别是,您需要编写一个包装器,该包装器包含
extern "C"您实际需要调用的所有函数。
对于任何任意
type* function()定义,您都可以使用JNA映射方法来返回a
com.sun.jna.Pointer,但是您将无法从JNA调用C ++对象上的方法。
一个简单的解决方法是编写一个C接口库,该库仅为您调用对象上的方法…因此,如果您有一些成员函数
foo(),则可以从C ++代码中导出C方法:
extern "C" void bar(type* var){ var->foo();}显然,这将为您增加一些工作…但是我怀疑切换到JNI的开销大致相同。
JNA只关心方法在DLL中的导出方式-并且必须 没有 C ++修饰(因此
extern"C"),因此您可以在任何此类方法中执行所需的任何操作,而无需暴露调用的方法。
在上面的人为设计示例中,这意味着
foo(),只要在DLL中定义它,实际上甚至不必公开它。由于它是C
++函数,因此JNA无法直接调用它,但是可以在JNA可以调用的函数中调用它,这就是我提出的解决方案起作用的原因。
因此,是的,您可以将对所有成员函数(创建,操作,销毁)的调用完全封装在一个函数中,而JNA则不在乎。



