我正在使用调用API在C代码中加载和运行JVM。我正在使用Java结构体JavaVMOption来实现这一点。具体来说,我使用其中的元素char *optionString来指定我的
我所做的事情直接从Java示例中得来,并且它工作得很好,直到我需要使用宽字符/Unicode路径 - 我无法这样做,因为optionString是一个char*而不是wchar_t*。有人知道如何解决这个问题吗?解决方案应限制在JDK 1.6及以下版本。
我仔细阅读了JNI文档: http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html#wp633
我已经阅读了 Eclipse 可执行启动器源代码的部分,其中做了一些类似于使用默认代码页将宽字符转换为多字节字符的操作。
-Dbs.prefsdir="c:\\develop\\XXXXChineseMixedLationCharsXXXX\\"
,其中bs.prefdir
是可以由用户定义的路径。我所做的事情直接从Java示例中得来,并且它工作得很好,直到我需要使用宽字符/Unicode路径 - 我无法这样做,因为optionString是一个char*而不是wchar_t*。有人知道如何解决这个问题吗?解决方案应限制在JDK 1.6及以下版本。
我仔细阅读了JNI文档: http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html#wp633
char *optionString; /* the option as a string in the default platform encoding */
我已经阅读了 Eclipse 可执行启动器源代码的部分,其中做了一些类似于使用默认代码页将宽字符转换为多字节字符的操作。
int byteCount = WideCharToMultiByte (CP_ACP, 0, (wchar_t *)src, -1, NULL, 0, NULL, NULL);
char *dest = malloc(byteCount+1);
dest[byteCount] = 0;
WideCharToMultiByte (CP_ACP, 0, (wchar_t *)src, -1, dest, byteCount, NULL, NULL);
return dest;
我尝试使用上面的代码将optionString视为多字节字符字符串,但这并不起作用。我也尝试将其视为Unicode本身,但这也无效。请问有人有解决办法吗?
-D
选项,因此可以使用JNI来调用System.setProperty
以实现相同的效果。 - Holger