栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java Native Access不使用C ++,对吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java Native Access不使用C ++,对吗?

这个问题的意思是询问如何使用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则不在乎。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/573719.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号