T
Tomate_Salat
Gast
Hi, ich habe gerade etwas nettes entdeckt:
und die loadMethode in c++:
Ist euch schonmal aufgefallen, dass man mit JNI finale Variablen überschreiben kann. Ich nehme mal, das funktioniert, weil er einfach auf den Speicherplatz zugreift.
MFG
Tomate_Salat
Java:
public class SoundLib
{
private final String[] tracks;
static
{
System.loadLibrary("sounds");
}
public native void play(int track);
public native void loadTracks();
public SoundLib()
{
tracks = null;
}
public String[] getTrackList()
{
return tracks;
}
public int getTrackCount()
{
return tracks == null ? -1 : tracks.length;
}
}
und die loadMethode in c++:
Code:
JNIEXPORT void JNICALL Java_jni_SoundLib_loadTracks(JNIEnv *env, jobject obj)
{
jstring track1 = env->NewStringUTF("TrackA");
jstring track2 = env->NewStringUTF("TrackB");
jobjectArray a = env->NewObjectArray(2,env->FindClass("java/lang/String"),env->NewStringUTF(""));
env->SetObjectArrayElement(a,0,track1);
env->SetObjectArrayElement(a,1,track2);
jclass clazz = env->GetObjectClass(obj);
jfieldID fid = env->GetFieldID(clazz,"tracks", "[Ljava/lang/String;");
env->SetObjectField(obj,fid,a);
}
Ist euch schonmal aufgefallen, dass man mit JNI finale Variablen überschreiben kann. Ich nehme mal, das funktioniert, weil er einfach auf den Speicherplatz zugreift.
MFG
Tomate_Salat