Java本机访问不';t做C++;,正确的? 我在网上找到了许多引用(包括一些StActExcel)到JNA用于C++库,但是在JNA文档中找不到任何可能的引用。似乎没有任何方法来包装C++类,尤其是。

Java本机访问不';t做C++;,正确的? 我在网上找到了许多引用(包括一些StActExcel)到JNA用于C++库,但是在JNA文档中找不到任何可能的引用。似乎没有任何方法来包装C++类,尤其是。,java,java-native-interface,native,jna,Java,Java Native Interface,Native,Jna,我需要本机访问才能使用RTAudio,但RTAudio的所有函数都是RTAudio类的成员函数。因此,请确认一下,JNA不是正确的方法?您是对的,JNA用于访问本机库。我认为您需要的是一个Java-COM桥。如果是这种情况,有几个免费的替代方案: JCOM 雅各布 我在关卡中使用了Jacob,效果很好,但我认为它有点过时。试试看。它会为你创建C++类的包装器。 这个问题的答案是问,这是可能的,但是你必须做一些工作。特别是,您需要编写一个包装器,用于extern“C”s任何实际需要调用的函数 <

我需要本机访问才能使用RTAudio,但RTAudio的所有函数都是RTAudio类的成员函数。因此,请确认一下,JNA不是正确的方法?

您是对的,JNA用于访问本机库。我认为您需要的是一个Java-COM桥。如果是这种情况,有几个免费的替代方案:

JCOM

雅各布


我在关卡中使用了Jacob,效果很好,但我认为它有点过时。

试试看。它会为你创建C++类的包装器。

这个问题的答案是问,这是可能的,但是你必须做一些工作。特别是,您需要编写一个包装器,用于
extern“C”
s任何实际需要调用的函数

< >对于任意的任意代码>类型*函数()/Cuth.Debug,您可以使用JNA映射该方法,以返回<代码> COM.Sun.jna.指针< /C> >,但不能从JNA调用C++对象的方法。

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

extern "C" void bar(type* var){
   var->foo();
}
显然,这将为您增加一些工作…但我怀疑切换到的开销将大致相同

只关心在DLL中导出方法的方式,并且必须没有C++装饰(因此,”,因此您可以在任何方法中执行任何需要的方法,而不公开所调用的方法。p> 在我上面设计的示例中,这意味着
foo()
,只要它是在DLL中定义的,实际上甚至不必公开。由于它是C++函数,JNA不能直接调用它,但它可以从JNA可以调用的函数内调用,这就是为什么我提出的解决方案工作的原因。

是的,你可以在一个函数中完全封装调用所有成员函数(创建、操作、销毁),JNA不关心。

是JNA的一个精神孩子,它增加了一些有限的C++支持(+完全支持)。如果你没有使用太多的模板,它可能只是工作


(免责声明:我是BridJ&Jnavior的作者)

回答得很好,谢谢。如果正则C方法在函数体内部创建C++类实例,调用成员函数,然后删除对象,可以直接避免成员函数的绑定吗?或者JNA不知怎么地“知道”并拒绝其他看起来是C函数但使用C++的他们的身体?@卡内德斯需要比评论允许更多的空间,请参阅我的编辑在文章中。谢谢马克,这工作完美!外部“C”void rtattempt(void){RtAudio::RtAudio audio audio;std::cout