c ++コードを呼び出すネイティブ関数呼び出しがあり、このコードはユーザー定義クラスのインスタンスを作成します。
この関数には次のシグネチャがあります。
public native Object loadEngine(int arg);
この呼び出しが行われた後、loadEngine()から返された「オブジェクト」を取得して変更する、またはデータを要求するネイティブ関数をさらに呼び出したいと思います。
署名の例:
public native String loadEngine(Object engine, int queryID);
- これを行うことさえ可能ですか?
- 可能であれば、GameEngineデータ型をjavaObjectまたはjnijobjectに変換するにはどうすればよいですか。
- 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を介してc++にネイティブJavaコードを呼び出しているため、残念ながらネイティブ関数を次のように定義することはできません。
public native GameEngine loadEngine(int arg);
理解できますが、回避策を理解できないようです。
ありがとう、スカーレット。