Esiste una funzione C++, chiamata dal codice Java tramite JNI.
voglio passare correttamente il sottostante c-string a Java, quindi mi hanno fatto seguito accordi:Come passare una stringa C++ a JNI Java in un modo sicuro per thread sicuro?
// main.cpp
string global;
const char* data() // Called externally by JNI
{
return (global = func_returning_string()).data(); // `.data()` = `.c_str()`
}
Ma in questo caso, la funzione data()
non è più thread-safe.
Qual è il modo migliore per ottenere la sicurezza del thread durante il passaggio della stringa senza causare alcun comportamento indefinito?
Attualmente non sto usando 'jstring' ecc nel mio codice per tenerlo indipendente da Java (poiché è anche usato per iPhone). Anche se posso aggiungerlo per segregazione. C'è un altro modo, oltre a questo? – iammilind
Io lavoro con codice C++ sotto Android, abbiamo uno strato di codice che unisce codice java con motore C++ - e questo sta usando jni. altro modo - per ottenere dati da C++? - potresti anche passare l'array Java al codice C++ e far sì che il codice C++ lo riempia di contenuto di stringhe. – marcinj
@iammilind 'NewStringUTF' assume che' data() 'restituisca un puntatore a una stringa _modified UTF-8_ terminata da 0x00. In caso contrario, è possibile determinare che tutte le stringhe possibili nei dati siano compatibili. –