簡體   English   中英

使用COM將字符串從C#傳遞到cpp

[英]Passing a string from C# to cpp with COM

我有一個C#COM服務器,由cpp客戶端使用。

其中一個C#方法返回一個字符串。

在cpp中,返回的字符串以Unicode(UTF-16)表示,至少根據內存視圖。

  1. COM字符串總是這樣嗎?
  2. 有沒有辦法使用UTF-8代替?
  3. 我看到一些代碼,其中字符串在cpp和c#之間傳遞為字節數組。 這有什么好處嗎?
  1. 是。 標准COM字符串類型是BSTR。 它是以UTF16編碼的Unicode字符串,就像Windows的本機字符串類型一樣。
  2. 不,COM方法不會理解UTF8字符串,它會把它變成中文。 UTF8是一個很好的文本文件編碼,不適用於操作內存中字符串的程序。 UTF8需要1到4個字節之間的任何值來編碼Unicode代碼點。 與基本字符串操作非常不兼容,例如獲取大小或索引字符。
  3. C和C ++程序傾向於使用8位編碼,與“char”類型兼容。 這是一種古老的做法,可以追溯到Unicode出現之前的一個時代。 它沒什么吸引力,有許多 8位編碼。 典型的問題是,如果由使用相同8位編碼的程序讀取,則只能正確解釋作為文本輸入的數據。 換句話說,當計算機相距不到1000英里時。 在歐洲較少。
  1. 沒有。
  2. 是。 如果要將字符串作為ANSI字符串而不是Unicode返回, 請將屬性 [return: MarshalAs(UnmanagedType.LPStr)]放在C#中的方法定義之前。
  3. 是的 - 作者可能已經這樣做,通過側面步進默認的編組行為來保持對字符串內容編碼的非常細粒度的控制。

暫無
暫無

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

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