2023-01-19 404
我目前在项目中同时使用C ++和Java,我希望能够将C ++中包含的对象发送到我的Java接口,以通过GUI进行修改,然后将修改发送回去在C ++.
到目前为止,我一直没有返回INT或布尔来通过JNI界面返回Java.这次,我必须通过接口发送对象.我在C ++和Java中都提供了类似的类定义. 我想知道如何创建对象,以便可以在Java中使用它.
在C ++中我有:
JNIEXPORT MyObject JNICALL Java_ca_X_Y_Z_C_1getMyObject(JNIEnv* env, jclass, jint number);
此功能将由Java调用,以便从C ++侧获取对象(该对象包含在单例中,易于访问).
在Java端,我对此方法进行了简单的调用,
MyObject anObject = C_getMyObject(3);
应该返回我新创建的对象.
java当我进行实际电话时,Java目前会返回我不满意的Linkerror.怎么了?
这是我选择使用的解决方案:
首先,我将在Java中创建一个类似的对象.然后,从C ++我将其实例化并传递所有值.
(C++)
clazz = env->FindClass("java/lang/Integer");
jmethodID method = env->GetMethodID(clazz, "<init>", "(I)V");
return env->NewObject(clazz, method, (jint)anInteger);
,但后来我意识到这不是很便携,有点太复杂了.
相反,我决定返回Java会解析并用来初始化对象的字符串.
(JAVA)
String aString = "valuesoftheobject";
MyObject myObject(aString);
myObject将具有一个构造函数,该构造函数为字符串.我相信该解决方案是简单有效的.
您应该查看的另一个工具是 swig . SWIG是用于现有C/C ++对象的其他语言(例如Java,Python或C#)生成包装器的绝佳工具.它将在C/C ++对象周围生成自动Java包装器,并为您完成所有重型JNI.
我在 xuggler 中广泛使用它.要查看一个示例,如果您下载Xuggler源代码,这里有一个C ++对象:
csrc/com/xuggle/xuggler/IStreamCoder.h
我在这里定义一个swig接口文件:
csrc/com/xuggle/xuggler/IStreamCoder.i
,当通过swig运行时,它会生成一个Java对象(在此处存储)
generate/java/com/xuggle/xuggler/IStreamCoder.java
然后,我们可以轻松地从Java访问该对象(好吧,我添加了一些涉及计数的内容,但这是非常高级的).希望会有所帮助.
art
如果您的MyObject类是在C ++中定义的,则您将无法在Java中访问其方法.我会尝试在您的C对象周围定义Java包装类:
Java:
public C_Object() {
handle = createHandle();
}
private native long createHandle(); // or whatever pointer/handle type?
public void doStuff() {
_doStuff(handle);
}
private native void _doStuff(long handle);
如果您可以推断C API,则可以尝试 jna ..
您的不舒服LinkError可能是您的函数名称中的额外字符,或者也许无法处理MyObject返回值?
以上所述是小编给大家介绍的通过JNI将C ++类返回JAVA,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/25771.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态