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 是单字节,BSTR 是双字节)。如果不可能,您应该考虑另一种编组类型,例如 UnmanagedType.LPStr。

于 2012-05-11T09:41:21.287 回答