我正在使用调用 api 在 C 代码中加载和运行 jvm。我正在使用 java 结构 JavaVMOption 来执行此操作。具体来说,我使用它的元素 char *optionString 来指定-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 本身,但这也不起作用。请问有人有解决方案吗?