2012-06-28 87 views
1

我有一個C++類需要使用COM interop與.NET dll進行交互。在COM中傳遞字符串作爲參數Interop方法

我有:

1. 從C++哪個操作對象是.NET實例調用方法,包括:

m_pCommManager.CreateInstance(__uuidof(CHmHTTPManager)); 
    m_pCommManager->Communicate(/*string parameter*/); 

2. 用下列方法A達網絡接口,其C++類均應符合:

void ResponseRecieved(/*string parameter*/) 

我的問題是:什麼是參數類型,我應該選擇的是:

答: 易於在兩側進行操作(即使通過鑄造)。

B. 兩種環境(因爲它是不一樣的,我不能使用C「字符串」 ++和.NET)

具體使用的例子非常歡迎合格。

回答

0

您應該在C++中使用BSTR字符串。

從MSDN:

甲BSTR是由一個長度前綴, 數據串,和終止子的複合數據類型。下表描述了這些 組件。

BSTRs使用COM內存分配函數進行分配,因此它們可以從方法返回而不需要考慮內存分配。

在你的COM對象的IDL文件,這將是:

HRESULT mySampleMethod([in] BSTR mySampleParam); 

如何在C++中的實際代碼看起來像將取決於COM對象的類型/類型庫您正在開發(我意味着您使用的是基於MFC的COM對象還是基於ATL的對象)。在任何情況下,我建議您使用Visual Studio中的嚮導來創建/修改您的類型庫。

在.Net方面,您只需使用正常的字符串類型,如果將參數定義爲COM對象的類型庫中的BSTR,它將自動編組。

您也可以找到這個問題的有用:

Convention for passing BSTRs into COM functions from C# (COM interop)

+0

而在.NET方面我該怎麼辦? – user181218

相關問題