как передать расширенные символы ASCII через JNI через C ++ - PullRequest
1 голос
/ 16 июня 2011

Я пытаюсь использовать JNI через VC ++ и передать пользовательский каталог в classpath в виде строки UTF-8 -Djava.class.path = C: \ Mydir \ my.jar

Это хорошо работает, и я мог найти методы в банке, используя FindClass

Но когда имя каталога содержит какие-либо расширенные символы ASCII, FindClass возвращает исключение NoClassDefFound. Я думаю, это потому, что JVM не может загрузить файл JAR, и я делаю что-то не так в передаче аргументов.

Вот что я делаю 1) Создайте std :: wstring jarPath (L "-Djava.class.path = C: \ ÆËñœ \ my.jar"); 2) Преобразуйте wstring в CP_UTF8, используя WideCharToMultiByte 3) скопируйте utf8String в optionString и вызовите JNI_CreateJavaJVM

Я попытался распечатать преобразованный utf8 в файл журнала непосредственно перед вызовом JNI_CReateJavaJVM, и он отлично печатается.

Может кто-нибудь сказать, является ли CP_UTF8 (определенный в Windows SDK WinN; s.h) не тем, чего ожидает JNI? Как отладить эту проблему, любая помощь очень ценится.

Заранее спасибо Рахул

1 Ответ

0 голосов
/ 16 июня 2011

Документация предполагает, что строка параметра должна быть в "кодировке платформы по умолчанию".Это, вероятно, означает, что вам нужно использовать CP_ACP.Если ваши символы не могут быть представлены в этой кодировке, то я не уверен, что вы можете многое сделать.

(Вместо этого можно будет использовать короткое имя файла?)

...