C++ 経由で JNI 経由で拡張 ASCII 文字を渡す方法
-
28-10-2019 - |
質問
VC ++経由でJNIを使用し、ClassPathのカスタムディレクトリをUTF -8 String -djava.class.path = c: mydir my.jarとして渡そうとしています
これはうまく機能し、FindClass を使用して jar 内のメソッドを見つけることができました。
ただし、ディレクトリ名に拡張 ASCII 文字が含まれている場合、FindClass は NoClassDefFound 例外を返します。これは、JVM が jar ファイルをロードできず、引数を渡す際に何か間違ったことをしているためだと思います。
私がしていることは1)2)WideChartomultibyteを使用してWSTRINGをCP_UTF8に変換する3)UTF8STRINGをオプションストリングにコピーしてJNI_CREATEJAVAJVMに電話します
JNI_CReateJavaJVM を呼び出す直前に、変換された utf8 をログ ファイルに出力しようとしましたが、完全に出力されました。
CP_UTF8 (Windows SDK WinN;s.h で定義) が JNI が期待するものではないかどうか、誰か教えていただけますか?この問題をデバッグするにはどうすればよいですか。助けていただければ幸いです。
事前にラーフルに感謝します
解決
の ドキュメンテーション オプション文字列が「デフォルトのプラットフォームエンコーディング」である必要があることを示唆しています。それはおそらく CP_ACP を使用する必要があることを意味します。文字をそのエンコーディングで表現できない場合、できることはあまりありません。
(代わりにファイルの短い名前を使用できるでしょうか?)