2016-05-19 4 views
1

gemäß der doc:JNI Signatur von nicht verpackten Gegenstände

Der Name Argument ist ein vollständig qualifizierten Klassennamen oder eine Array-Typ Signatur. Zum Beispiel ist der vollständig qualifizierte Klassenname für die java.lang.String Klasse: „java/lang/String“

Meine Frage ist eine Java-Neuling Frage, was die Unterzeichnung einer Klasse ist welche isn nicht verpackt?

+0

Die JNI Signatur von etwas ist gemäß der Ausgabe des 'javah' Werkzeug. Sie sollten nicht darüber nachdenken, es für einen Moment selbst herauszufinden. – EJP

Antwort

0

Wenn YourClass eine Klasse im Standardpaket ist, lautet der vollständig qualifizierte Name einfach YourClass.

Wenn die Java-Methode ist

public void method(YourClass x); 

dann können Sie das Verfahren über suchen:

jmethodID m = (*env)->GetMethodID(env, javaclass, "method", "(LYourClass;)V"); 

Das Werkzeug javah kann eine * .h-Datei erzeugen, in dem Sie die Methode Unterschrift sehen können.

Der vollständig qualifizierte Name leicht von Java gedruckt werden kann

System.out.println(instanceOfYourClass.getClass().getName()); 
+0

Danke. Ich habe eine Reihe von Fragen, es ist für den Zugriff auf eine Methode aus einem Objektfeld eines anderen Typs, funktioniert es? Was bedeutet das "V"? Ich denke, ich habe verschiedene Arten von Signaturen gesehen (ohne das "V" und Klammern) andere Web sind andere oder Signaturen für ältere Version von JNI? –

+0

'(LYourClass;) V' ist eine Signatur für eine Methode mit einem Parameter vom Typ YourClass und gibt void zurück. Ein anderes Beispiel ist '(B) I' - es Methode mit dem Parameter boolean, der int zurückgibt. Siehe http://stackoverflow.com/questions/30815284 –

+0

Ok, aber ich möchte auf einen Parameter eines Objekts und nicht auf eine Methode zugreifen, tut 'jfieldID fid = (* env) -> GetFieldID (env, myClass," theField " , "LClassname"); 'gefolgt von' jobject myObj = (* env) -> GetObjectField (env, jobjectContainer, fid); 'funktioniert? –