jni(Javaネイティブインタフェース)を使用してメソッドを呼び出そうとしていますが、メソッドを呼び出すとクラッシュします。私はドキュメントを読んでいたので、 "jvalue"型のオブジェクトをパラメータとして使う必要があることがわかりましたが、どのようにjobject/jをjvalueに変換できますか? (それが助けになる場合)jni:Bad JNI oop引数を使用したメソッドの呼び出し
jclass unsafeClass = (*env).FindClass("sun/misc/Unsafe");
jfieldID unsafeObjFieldID = (*env).GetStaticFieldID(unsafeClass, "theUnsafe", "Lsun/misc/Unsafe;");
jobject theUnsafe = (*env).GetStaticObjectField(unsafeClass, unsafeObjFieldID);
jmethodID defineClassID = (*env).GetMethodID(unsafeClass, "defineClass", "(Ljava/lang/String;[BIILjava/lang/ClassLoader;Ljava/security/ProtectionDomain;)Ljava/lang/Class;");
jsize dataSize = (*env).GetArrayLength(arr);
jbyte* data = (*env).GetByteArrayElements(arr, NULL);
jstring name = (*env).NewStringUTF("Test");
jint n0 = (jint) 0;
// In this method it crashes ._.
(*env).CallObjectMethod(theUnsafe, defineClassID, name, data, n0, dataSize, classLoader, NULL);
hs_err_pid:
は、ここに私の現在のコードですhttp://paste.reflex.rip/okugaluyok.go
編集:今、私は少しのエラーメッセージが表示されました、:私はstartparam "JNI -Xcheck" を見つけました。
FATAL ERROR in native method: Bad JNI oop argument
変更されましたが、それでも同じ位置でクラッシュします。主な質問にhs_err_pidを追加しました。 :) – Florian