2011-06-16 3 views
1

J'essaie d'utiliser JNI via VC++ et de passer un répertoire personnalisé dans le chemin de classe comme une chaîne UTF-8 -Djava.class.path = c: \ myDir \ my. jarcomment passer des caractères ASCII étendus via JNI via C++

Cela fonctionne bien et je pouvais trouver les méthodes dans le pot en utilisant FindClass

Mais quand le nom du répertoire contient des caractères ASCII étendus puis retourne FindClass exception noClassDefFound. Je suppose que c'est parce que la JVM n'est pas capable de charger le fichier jar et je fais quelque chose de mal à passer les arguments.

Voici ce que je fais 1) Créer un fichier jarPath std :: wstring (L "-Djava.class.path = C: \ ÆËñœ \ my.jar"); 2) Convertir le wstring à l'aide CP_UTF8 WideCharToMultiByte 3) copier le UTF8String à optionString et appelez JNI_CreateJavaJVM

J'ai essayé d'imprimer le UTF8 convertyed à un fichier journal juste avant d'appeler le JNI_CReateJavaJVM et il imprime parfaitement.

Quelqu'un pourrait-il dire si le CP_UTF8 (défini dans Windows SDK WinN; s.h) n'est pas ce que le JNI attend? Comment puis-je déboguer ce problème, toute aide est grandement appréciée.

Merci à l'avance Rahul

Répondre

0

Le documentation suggère que la chaîne d'option doit être dans « la plate-forme encodage par défaut ». Cela signifie probablement que vous devez utiliser CP_ACP. Si vos personnages ne peuvent pas être représentés dans cet encodage, je ne suis pas sûr que vous puissiez faire beaucoup.

(serait-il utilisable au lieu nom court du fichier?)

+0

j'ai trouvé le bogue suivant contre JVM http://bugs.sun.com/view_bug.do;jsessionid=17ba063642304ad90e9249db234?bug_id=4858889 – Rahul

+0

Salut Alan, CP_ACP a bien fonctionné. Mais la probabilité que vous ayez dit existe et là, ça risque d'échouer, mais de toute façon c'est beaucoup mieux que de simplement prendre en charge 127 caractères ASCII seulement. – Rahul

+0

J'ai essayé de donner des chemins relatifs à la JVM, par ex. les fichiers JAR se trouvent dans le répertoire d'installation de mes produits qui contient également sa propre machine virtuelle Java (dans le répertoire d'installation actuel). J'ai donc pensé donner le chemin relatif à la JVM. Mais cela n'a pas fonctionné. – Rahul

Questions connexes