come passare i caratteri ASCII estesi tramite JNI tramite C++
-
28-10-2019 - |
Domanda
Sto cercando di usare JNI tramite VC ++ e passare una directory personalizzata nella classpath come stringa UTF -8 -djava.class.path = c: mydir my.jar
Funziona bene e ho potuto trovare i metodi nel vaso usando FindClass
Ma quando il nome della directory contiene caratteri ASCII estesi, FindClass restituisce l'eccezione NoClassDefFound.Immagino che ciò sia dovuto al fatto che la JVM non è in grado di caricare il file jar e sto facendo qualcosa di sbagliato nel passare gli argomenti.
Ecco cosa faccio 1) Crea una std :: wstring jarpath (l "-djava.class.path = c: æëñœ my.jar");2) Converti il wstring in cp_utf8 usando widechartomultibyte 3) Copia UTF8String su OptionsRing e chiama Jni_Createjavajvm
Ho provato a stampare l'utf8 convertito in un file di registro subito prima di chiamare JNI_CReateJavaJVM e viene stampato perfettamente.
Qualcuno potrebbe dire se CP_UTF8 (definito nell'SDK di Windows WinN;s.h) non è quello che si aspetta JNI?Come eseguo il debug di questo problema, qualsiasi aiuto è molto apprezzato.
Grazie in anticipo Rahul
Soluzione
IL documentazione suggerisce che la stringa dell'opzione deve essere nella "codifica predefinita della piattaforma".Ciò probabilmente significa che dovresti utilizzare CP_ACP.Se i tuoi personaggi non possono essere rappresentati in quella codifica, non sono sicuro che ci sia molto che puoi fare.
(Sarebbe invece utilizzabile il nome breve del file?)