native C auf Android

Crash123

Erfahrenes Mitglied
Hallo Leute,

ich versuche einen C-Code in meine App einzubinden,
der Umgang mit native-Methoden und dem NDK-Tool
ist kein Problem, nur will ich will ich nun meiner
nativen Methode einen String übergeben - logisch
ein char array ... aber beim testen und überprüfen
kommt in der nativen Methode nur Müll raus.

Die native Methode ist i.ä. so ...
Code:
int Java_com_example_test_MainActivity_myNativeFunktion(JNIEnv * env, jobject this, char path[], int pos){

...

return result
}

Verwendet im Java

Code:
private native int myNativeFunktion(char[] path, int pos);
    static {  
        System.loadLibrary("bla");  
    } 

...

char[] array = path.toCharArray();

...

int reslut=0;

...

result = myNativeFunktion(array, i);

Der String und das Array sehen i.ä. so aus:


Erwarteter String:
/mnt/sdcard/.../*.3gp

Das char-Array das die native Methode erhält bzw. verwendet:
"Diverse Steuerungszeichen"...@ / m n t / s d c a r d /


Ich kann mir nicht mehr helfen :(
Ich habe immer angenommen die primitiven Datentypen
sind in allen Sprachen gleich ... aber offensichtlich
muss char in Java größer sein als in c.
Ich hab schon im Netz gesucht aber so richtig mehr weiß ich
irgendwie noch nicht.

Vielen Dank im Voraus
 

Crash123

Erfahrenes Mitglied
OK ... ich habe jetzt nach einigen Tests ein Array von byte übergeben
und auch dann habe ich nur mist im c-code
bzw. scheint es als wäre vor dem eigentlichen Inhalt des Arrays noch
mehr information ... was ich mir gut vorstellen kann, ist das sich da die
länge befindet o.ä.

Ich hab nämlich mit dem Byte-Array etwas rum gespielt und wenn ich
lange genug über das Array gehe bekomme ich schon die richtige Information
aber ich hab keine Ahnung ob der Inhalt vorher immer gleich lang ist, dann
würde ich ihn einfach hart abschneiden ... aber das kann nicht der Plan sein -,-

Auf jeden Fall weiß ich einfach nicht wie ich dieses Array mit dem gewünschten
Inhalt übergebe.

Denn das Byte[] hilft nicht wirklich solange ich nicht weiß an welcher stelle
die Information beginnt.
 

Muepe32

Erfahrenes Mitglied
Hallo Crash123

Hast du es schon mal mit einem jstring probiert anstatt ein char-array?

Gruss
Muepe
 
Zuletzt bearbeitet:

Crash123

Erfahrenes Mitglied
Danke das mit dem jstring hat mir dann doch geholfen ...
das Problem lässt sich damit lösen:


jstring string="blablablabla";
char *place_holder;
place_holder = (char *)(*env)->GetStringChars(env, string, 0);

Thx nochmal