NDK - Rückgabe von char

GENiALi

GENiALi

Fortgeschrittenes Mitglied
11
Hallo

Ich versuche ein App fertig zu stellen wo mir nur noch ein kleines Teil fehlt. Aber daran beisse ich mir die Zähne aus da ich eigentlich keinen schimmer von NDK und C habe. Das C Projekt, was ich eingebunden habe, ist ein OS Projekt und funktioniert auch soweit unter Android. Ich möchte mir nur noch eine zusätzliche Funktion einbauen. Aber da beisse ich mir die Zähne aus.

Also, hier mal ein bischen Code.

Das C Projekt erstellt ein Applog das es an den stdout ausgibt. Diese Infos will ich in der App auch nutzen. In C sieht das so aus.
Code:
static char *last_log = "";

void applog(int prio, const char *fmt, ...)
{
    va_list ap;
    last_log = fmt;
    va_start(ap, fmt);
....
last_log ist von mir und soll die Meldung fmt aufnehmen. Im Code wird die wie folgt aufgerufen.
Code:
applog(LOG_ERR, "thread %d create failed", i);
Dann mache ich eine Methode oder Funktion die mir last_log zurückgeben soll.

Code:
char *get_last_message()
{
    return last_log;
}
Jetzt gibt es noch eine native.c die mir die Methoden für Android zugänglich macht. Die sieht bei mir so aus.

Code:
jchar Java_ch_geniali_Test_Service_getLastMessage(JNIEnv * env, jobject this){
    return get_last_message();
}
Solche Methoden habe ich noch einige, die auch funktionieren. Nur eben diese nicht.

Im Android sieht es dann in etwa wie folgt aus.
Code:
private native String getLastMessage();
......
String message = getLastMessage(); //Das will nicht
App wird dann angehalten. Aber im logcat finde ich keine für mich verständliche Hinweise. Was ist der Fehler? Ich denke da stimmt was in C nicht. Wäre dankbar für einen Hinweis. :)
 
Hi,

ich kann nicht viel helfen, aber vielleicht ein paar Denkanstöße geben.

Code:
char *get_last_message() {     return last_log; }
Muss hier das Sternchen hin? Das Sternchen steht ja für einen Pointer, willst du also einen Pointer zurückgeben?

Ich habe hier was gefunden:
c - initialize static char const *somevar - Stack Overflow

Dort ist ein guter Satz im zweiten Kommentar:
Correct. You could not write *program_name = 'a'; because program_name points to constant data;

Ich glaube du musst dich leider in Pointer und char arrays einarbeiten.
 
  • Danke
Reaktionen: GENiALi
Danke. Werde mir das Heute Abend mal anschauen. Im Office kann ich kein NDK. :)
 
Kardroid schrieb:
Code:
char *get_last_message() {     return last_log; }
Muss hier das Sternchen hin? Das Sternchen steht ja für einen Pointer, willst du also einen Pointer zurückgeben?
Das mag er dann noch weniger. Na ja. Habe mir mal ein C Buch bestellt. Muss mich wohl mal einlesen.
 
Tom299 schrieb:
Und wieso gleich ein C-Buch kaufen wenn man Internet hat?

Alte Schule. Ich lese definitiv nicht gerne im grossen Stiel im Internet. Ich habe VIEL lieber ein Buch vor mir. :)

Danke für die Tipps. Werde mir deine Hinweise noch genauer anschauen.
 

Ähnliche Themen

S
Antworten
17
Aufrufe
573
jogimuc
J
5
Antworten
22
Aufrufe
1.445
590239
5
M
Antworten
4
Aufrufe
1.181
swa00
swa00
Zurück
Oben Unten