2011-10-29 14 views
20

Próbuję wykonać funkcję w Java (z C), który ma następujący podpis:JNI: Przekazywanie wielu parametrów w podpisie funkcyjnego dla GetMethodID

public void execute(int x, int y, int action); 

Moim problemem jest zdefiniowanie podpisu funkcji w GetMethodID :

env->GetMethodID(hostClass, "execute", "(I;I;I;)V"); 

problem mA otrzymuję to:

W/dalvikvm(1849): Bogus method descriptor: (I;I;I;)V 
W/dalvikvm(1849): Bogus method descriptor: (I;I;I;)V 
D/dalvikvm(1849): GetMethodID: method not found: Lcom/device/client/HostConnection;.execute:(I;I;I;)V 

nie jestem pewien, ho w, aby określić podpis metody w GetMethodID (dla 3 liczb całkowitych jako parametrów). Widziałem, jak ludzie używają ";" aby oddzielić parametry w innych wpisach dla klasy String i File, ale nic z elementami pierwotnymi, takimi jak liczba całkowita.

Jaki byłby właściwy sposób, aby to zrobić, proszę?

Dziękuję.

Odpowiedz

48

Zgodnie z tym file należy użyć podpisu (III)V. Tylko wtedy, gdy musisz określić pełną klasę, należy użyć ";", np. Ljava/lang/String;.

+0

Wielkie dzięki! Pomogłeś mi rozwiązać mój problem, dziękuję! – Jary

+0

To naprawdę przydatne łącze do rozwiązywania wszystkich problemów związanych z JNI, dziękuję! –

+0

Jeśli jest publiczne wykonanie pustki (String x, int y); ? (Ljava/lang/String; I) V? Błąd ... – zszen

Powiązane problemy