我有一个调用我的 c++ 代码的本机函数调用,并且此代码创建了我的用户定义类的实例。
此函数具有以下签名:
public native Object loadEngine(int arg);
进行此调用后,我想调用更多本机函数,这些函数将获取从 loadEngine() 返回的“对象”并对其进行修改,或从中请求数据。
签名示例:
public native String loadEngine(Object engine, int queryID);
- 甚至有可能做到这一点吗?
- 如果可能的话,我将如何将我的 GameEngine 数据类型转换为 java Object 或 jni jobject。
- Java 会自动将其作为参考传递,这样它就永远不会被复制,我可以修改它,对吧?
以下场景会生成一个错误,指出它无法将 GameEngine 转换为 jobject,这是可以理解的,但这是我对 Java 经验非常少的最好的尝试:
JNIEXPORT jobject JNICALL Java_package_loadEngine
(JNIEnv *env, jobject obj, jint arg) {
GameEngine engine(params);
return (jobject)engine;
}
JNIEXPORT jstring JNICALL Java_package_queryAction
(JNIEnv *env, jobject obj, jobject engine, jint arg) {
String ret = newString(Integer.toString((GameEngine)engine.unimportant()));
return ret;
}
由于我通过 jni 将本机 Java 代码调用到 C++,很遗憾我无法将本机函数定义为:
public native GameEngine loadEngine(int arg);
可以理解,但我似乎无法找到解决方法。
谢谢,斯嘉丽。