私はVisual Studioのコンパイル済みDLLでDelphiのC extern関数を呼び出しています。次に、DLLメソッドは、引数としてC++文字列型をとるC++メソッドを呼び出します。 Delphiの最後の文字列はUTF-8でエンコードされています(BOMはありません)。私は、文字列型を取るC++メソッドがUTF-8でエンコードされた文字列を取得することを確認する必要があります。UTF-8文字列をDelphiからDLL C extern関数に渡すには?
私はDLLのソースコードを変更することができます。私の質問:
Delphi側の私のUTF-8文字列はstring型です。 C externメソッドはどのような型を取るべきですか? PChar、PWideChar?それをC++の文字列型に変換するにはどうしたらいいですか?
注:UTF-8文字列をAnsiStringに変換することはできません。なぜなら、エンコードには保持する必要があるギリシャ文字が格納されているからです。 C++エンドは、Delphi文字列のコピーを作成し、割り当てられたメモリの処分を処理します。 (XE6を使用)
Delphiの終わり:
mystr : string;
callCExternMethod (mystr) // cast to what?
C++エンド(VS 2013を使用して):PAnsiChar(Utf8String(str))
:デルファイ側で
void callCExternMethod (????? mystr) {
// convert mystr to C++ string type
callCPlusPlusMethod (takes C++ string type)
}
確かにこの質問は100回あります.....あなたはグーグルで試してみましたか?テキストを使用するWindows関数を呼び出すたびに、これを行うことになります。 – Johan
デルファイ側のPAnsiChar。 C++側のconst char *関数を呼び出す前に、nullで終了したutf8をエンコードする必要があります。 RTLにはそのための機能があります。検索を試みてください。 –
必須読書:http://rvelthuis.de/articles/articles-pchars.html – Johan