2012-02-24 16 views
11

GetMethodID işlev imzası parametresinde, özel bir sınıfın dizisini kabul ettiğim işlevin kimliğini nasıl belirleyebilirim?GetMethodID yöntem imza parametresinde sınıf dizisi nasıl belirlenir?

Ben imzası ile java bir fonksiyonu var:

void getData(ListDataClass[] arryData) 

Ve GetMethodID işlevini kullanarak JNI'yı arayüzünden bu işlevin yöntem kimliği almak istiyorum. i şu şekilde işlev imzası parametrede belirttiğimiz Bunun için
:

"([myPackeg/ListDataClass)V" 

Ama bu çalışmıyor ve ben Method Not Found olarak istisna olsun. Dize sınıfı dizisini belirtirseniz aynı şey çalışır. Örneğin

Lclass/path/ClassName; 

:

+0

Eğer ana iş parçacığı gelen veya farklı bir iş parçacığı gelen diyorsun: (varsayarak C++ ve JNIEnv işaretçi olarak adlandırılan env) aşağıdaki gibi

Ardından yöntem bulabilirim? Farklı bir ileti dizisinden (yerel kodunuzda oluşturduğunuz bir iş parçacığı gibi) arama yapıyorsanız, başka şeyler yapmanız gerekir. –

+0

@Alex Ne ek şeyler demekten bahsediyorsun? Farklı iş parçacığından arıyorum ve bir şeyler yanlış. – nabroyan

cevap

23
tam nitelikli-sınıfları için

JNI'yı tipi imzaları şeklinde

bir yöntem olup imza ilk parantez içinde bağımsız değişkenler yerleştirerek ve bu yapılanmış
"Ljava/lang/String;" // String 
"[Ljava/lang/String;" // String[] (array) 

Sağ dirsekten sonra dönüş tipi. Örneğin:

long f (int n, String s, int[] arr); // Java method 
"(ILjava/lang/String;[I)J" // JNI type signature 

Ne gelen yukarıdaki örneği ödünç nerede JNI'yı tipi imzalar here için için dokümanlar bulabilirsiniz. Belirli örnekte

:

void getData(ListDataClass[] arryData) // Java method 
"([Lclass/path/ListDataClass;)V" // JNI type signature 

Not: Kesin tip imzası sınıf yolunda bağlıdır.

jclass clz = env->FindClass("class/path/ListDataClass"); 
jmethodID mid = env->GetMethodID(clz, "getData", "([Lclass/path/ListDataClass;)V"); 
+0

orada bir yazım hatası var: '([Lclass/path/ListDataClass;) V',' 'değil (L [sınıf/yol/ListDataClass;) V' – ankhzet

+0

sabit, teşekkürler – GooseSerbus

İlgili konular