私はアンマネージコードによって呼び出されるインターフェイスを持っています。 BSTR型を渡しますが、データはASCII文字列です。ファイルに書き込まれているときに予期しない文字が表示されます。 Unmanaged [BSTR [ASCII]] - > Managed [String [ASCII]] - > File [Unicode [ASCII]]のようにデータがどのように動くのか考えて、入力時の文字と出力時の文字を同じにする必要があります。これは正しいです?アンマネージコードによって呼び出されるインタフェース関数は以下の通りです。マーシャリングされたBSTR型を使用してASCII文字列を渡す
//C# interface called by unmanged code
public void WriteOutFile([In] [MarshalAs(UnmanagedType.BStr)] String asciiData)
{
File.WriteAllText(fileName, asciiData);
}
ASCIIからBSTRへの変換がネイティブコードで行われました。 BSTRはUnicode文字列です。あなたのC#メソッドが呼び出されるまでにそれについて何かするのは遅すぎる。これはC/C++コードのかなり典型的な問題ですが、修正を行う必要があります。本当に必死なら、Encoding.Default.GetBytes()でバイトに変換し、正しいエンコーディングのGetString()メソッドを適用することができます。元のエンコーディングがロッシーであるため、これは通常は機能しません。 –