0

アンマネージ コードによって呼び出されるインターフェイスがあります。BSTR 型を渡しますが、データは ASCII 文字列です。ファイルに書き込んでいるときに、予期しない文字が表示されます。データがどのように移動するかについての私の考え Unmanaged[BSTR[ASCII]] --> Managed[String[ASCII]] --> File[Unicode[ASCII]] したがって、入力時の文字は出力時の文字と同じでなければなりません。これは正しいです?アンマネージ コードによって呼び出されるインターフェイス関数は次のとおりです。

 //C# interface called by unmanged code
 public void WriteOutFile([In] [MarshalAs(UnmanagedType.BStr)] String asciiData)
 {
      File.WriteAllText(fileName, asciiData);
 }
4

1 に答える 1

1

まず、.NET 文字列は常に Unicode文字列です。対応するエンコーディングを使用して、具体的な文字列の表現を取得できますが、文字列内のすべての文字は Unicode 文字です。

次に、UnmanagedType.BStr を使用している場合、アンマネージ コードは BSTR を渡し、文字エンコーディングの問題を解決する必要があります (ASCII は 1 バイト、BSTR は 2 バイト)。それが不可能な場合は、UnmanagedType.LPStr など、別の型のマーシャリングを検討する必要があります。

于 2012-05-11T09:41:21.287 に答える