爲完全合格的類JNI類型簽名採取以下形式:
Lclass/path/ClassName;
例如:
"Ljava/lang/String;" // String
"[Ljava/lang/String;" // String[] (array)
的方法簽名從這些首先將參數括號內,並且建立了右括號後的返回類型。例如:
long f (int n, String s, int[] arr); // Java method
"(ILjava/lang/String;[I)J" // JNI type signature
你可以找到爲JNI類型簽名here,這是我借來的,從上面的例子中的文檔。
在你的具體的例子:
void getData(ListDataClass[] arryData) // Java method
"([Lclass/path/ListDataClass;)V" // JNI type signature
注:確切類型簽名取決於你的類路徑上。
然後你可以找到方法ID如下(假設C++和JNIEnv的指針稱爲ENV):
jclass clz = env->FindClass("class/path/ListDataClass");
jmethodID mid = env->GetMethodID(clz, "getData", "([Lclass/path/ListDataClass;)V");
你從主線程或從不同的線程中調用?如果您是從其他線程(例如您在本機代碼中創建的線程)進行調用,則需要執行其他操作。 – 2012-02-24 17:06:00
@Alex你是說什麼其他的東西?我是從不同的線程調用而出現錯誤。 – nabroyan 2013-08-15 07:40:52