Cómo pasar caracteres ASCII extendidos a través de JNI a través de C ++
-
28-10-2019 - |
Pregunta
Estoy tratando de usar JNI a través de VC ++ y pasar un directorio personalizado en el classpath como una cadena UTF -8 -djava.class.path = c: mydir my.jar
Esto funciona bien y pude encontrar los métodos en el frasco utilizando FindClass
Pero cuando el nombre del directorio contiene caracteres ASCII extendidos, FindClass devuelve la excepción de noclassDefFound. Supongo que esto es porque JVM no puede cargar el archivo JAR y estoy haciendo algo mal al pasar los argumentos.
Esto es lo que hago 1) crea un std :: wstring jarpath (l "-djava.class.path = c: Æëñœ my.jar"); 2) Convierta la WString a CP_UTF8 usando WideChartomultibyte 3) Copie el UTF8String a OptionString y llame a JNI_CreateJavajvm
He intentado imprimir el UTF8 convertado en un archivo de registro justo antes de llamar al JNI_CreateJavajvm y se imprime perfectamente.
¿Podría alguien decir si el CP_UTF8 (definido en Windows SDK Winn; SH) no es lo que el JNI espera? ¿Cómo depuggo este problema? Se agradece mucho cualquier ayuda.
Gracias de antemano Rahul
Solución
los documentación sugiere que la cadena de opción debe estar en "la codificación de plataforma predeterminada". Eso probablemente significa que necesitaría usar CP_ACP. Si tus personajes no pueden representarse en esa codificación, entonces no estoy seguro de que haya mucho que puedas hacer.
(¿Se puede usar el nombre corto del archivo?)