簡體   English   中英

使用編組的BSTR類型傳遞ASCII字符串

[英]Using a marshalled BSTR type to pass an ASCII string

我有一個非托管代碼調用的接口。 它傳遞了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);
 }

首先,.NET字符串始終是unicode字符串。 您可以使用相應的編碼來獲取具體字符串的任何表示形式,但是字符串中的所有字符都是unicode字符。

其次,如果使用UnmanagedType.BStr,則非托管代碼必須傳遞BSTR並解決字符編碼問題(ASCII是單字節,BSTR是雙字節)。 如果不可能,則應考慮另一種編組類型,例如UnmanagedType.LPStr。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM