T
Tomate_Salat
Gast
Hi,
bin gerade dabei mir nebenbei c++ näher zu bringen und dabei kam mir doch direkt jni in den Sinn .
So ich habe mal mit einfachen Sachen angefangen: eine Player-Klasse die Spielernamen + Punktezahlen verwaltet und auf wunsch diese in eine Datei schreibt. Funktioniert alles wunderbar. Jetzt habe ich mich die ganze zeit schon gefragt: wofür ist dieses [c]jobject[/c]. In den vielen Tutorials habe ich dann iwann mal gelesen: das ist eine Art referenz auf meine Caller-Klasse. (Also von z.B. KlasseA wird JNI aufgerufen und somit KlasseA mit übergeben als jobject).
Ich habe mir diesen Post mal angesehen, der ein ähnliches Problem behandelt, aber hat mir nicht sonderlich weitergeholfen, denn der Compiler meint, er findet meine Variable nicht.
Hier meine Java-Klasse:
und hier mal ein Auszug aus meinem cpp-File:
Mir ist auch nicht so wirklich ganz klar was [c](ILjava/lang/String; )D[/c] bedeutet. Dachte hier handelt es sich um einen Rückgabetyp, aber bei Tuxedos code, kam ja eigentl. kein String vor :-/.
Hoffe Ihr könnt mir bei meinem Denkfehler helfen.
MFG
Tomate_Salat
bin gerade dabei mir nebenbei c++ näher zu bringen und dabei kam mir doch direkt jni in den Sinn .
So ich habe mal mit einfachen Sachen angefangen: eine Player-Klasse die Spielernamen + Punktezahlen verwaltet und auf wunsch diese in eine Datei schreibt. Funktioniert alles wunderbar. Jetzt habe ich mich die ganze zeit schon gefragt: wofür ist dieses [c]jobject[/c]. In den vielen Tutorials habe ich dann iwann mal gelesen: das ist eine Art referenz auf meine Caller-Klasse. (Also von z.B. KlasseA wird JNI aufgerufen und somit KlasseA mit übergeben als jobject).
Ich habe mir diesen Post mal angesehen, der ein ähnliches Problem behandelt, aber hat mir nicht sonderlich weitergeholfen, denn der Compiler meint, er findet meine Variable nicht.
Hier meine Java-Klasse:
Java:
public class Spieler
{
public String test = "Test";
static
{
System.loadLibrary("Spieler");
}
public native void setName(String name);
public native String getName();
public native void addPoints(int points);
public native int getPoints();
public native void storeAs(String file);
public static void main(String[] args)
{
Spieler sp = new Spieler();
sp.setName("Thomas");
System.out.println( "Name : " + sp.getName() );
sp.addPoints(5);
sp.addPoints(10);
System.out.println( "Punkte: " + sp.getPoints() );
sp.storeAs("score.h");
}
}
und hier mal ein Auszug aus meinem cpp-File:
Code:
JNIEXPORT void JNICALL Java_Spieler_setName(JNIEnv *env, jobject obj, jstring name)
{
const char* cname = env->GetStringUTFChars(name, NULL);
jclass klasse = env->GetObjectClass(obj);
jfieldID o = env->GetFieldID(klasse, "test", "(ILjava/lang/String;)D");
std::cout << "TEST-Var in Java: " << o << std::endl;
Spieler::Gamer::player.setName(cname); // <-- Hier wird das ganze an meine Gamer-CPP-Klasse weitergeleitet
}
Mir ist auch nicht so wirklich ganz klar was [c](ILjava/lang/String; )D[/c] bedeutet. Dachte hier handelt es sich um einen Rückgabetyp, aber bei Tuxedos code, kam ja eigentl. kein String vor :-/.
Hoffe Ihr könnt mir bei meinem Denkfehler helfen.
MFG
Tomate_Salat