2014-07-01 82 views
0

我在C#中將多個COM對象實現爲本地COM服務器。我的客戶是用C++編寫的。這次我使用COM對象(C#類)將數據從C++傳遞到C#,並且工作正常。我只是想,如果這些COM對象只是「數據持有者」,使用C#結構來保存數據會更有效率嗎?使用C#結構體將數據從C#COM對象傳遞到C++

+0

也許吧。也許不會。你爲什麼不通過比較和分析發現。 –

回答

1

一般不會,特別是來自C#。這取決於您是否編寫了正確的 C++代碼。結構是一個互操作問題,打包和對齊規則是一個實現細節,很容易讓你陷入困境。乘以這個結構成員被封送的變幻莫測的變化,類型有3種常見的方式來封送。字符串和數組從來都不是問題。

編寫正確的C++代碼需要使用IRecordInfo interface,它使用類型庫中的結構定義來知道如何正確編組結構成員。您必須爲結構中的每個字段執行此操作。

當您使用進程內COM服務器時,這不會比調用字段的屬性getter更快。唯一一種在C#中很容易創建的類型。

您可以忽略此要求,並希望您的C++聲明與C#聲明匹配。這可能會起作用。但是,通常只有在編組信息的成本太高時才應該這樣做。只有當屬性獲取者的往返行程太高時,通常情況下,對於轉換公寓邊界的呼叫。就像它對於一個進程外服務器一樣。