2010-10-06 195 views
2

我已按照步驟here在Visual Studio 2008中創建COM DLL。我的目標是包裝現有的非託管C++ .lib。從非託管C++創建COM DLL LIB

有沒有簡單的方法來實現lib的COM接口。或者我只是不得不添加ATL簡單對象,這些對象基本上將對象包裝在我的庫中?

例如,我已經添加了簡單的ATL對象,CMyObject我的COM庫,我在創建包裝代碼,包括基本上裹包含在非託管C++庫的MyObject的行爲函數成員等在CMyObject?

回答

3

爲了使您的功能com你需要執行兩個主要步驟:

  • 介紹COM接口
  • 實現使用的代碼功能,這些接口你已經有

所以是的,你所描述的場景是解決這個問題的典型方法。

使用ATL將簡化很多事情。但是,您也必須處理例外情況。由於您的代碼是C++,因此可能會引發異常。 COM不允許在COM方法之外傳播異常 - 如果客戶端不在C++中,它會在代碼拋出異常時崩潰。因此,對於從COM直接調用的每個方法,包裝層需要有try - catch

+0

+1,關於可輕易錯過的例外的好處。 – 2010-10-07 06:47:29

2

我認爲按照您描述的方式添加包裝是最佳途徑。鑑於OLE的參數類型在很多情況下與C++參數不同,例如, BSTR而不是字符串或char *,COM需要一些包裝。唯一的選擇是有一個非COM DLL。