2012-07-27 30 views
1

我有一個用unmanged C++編寫的COM DLL,並且用VS 2010進行編譯。我可以使用regsvr32註冊DLL,我可以通過VBscript調用它。tlbimp做哪些Visual Studio IDE沒有做什麼?

當我嘗試添加對它的引用時,創建一個C#客戶端時,我看不到添加引用 - > COM選項卡中列出的COM對象。如果我手動瀏覽到DLL並嘗試選擇它,則表示該DLL不是有效的斷言或COM組件。

現在,我可以使用tlbimp工具生成一個interop DLL,並使用它作爲參考添加到我的C#客戶端。一切正常。

我的問題是:

  1. 爲什麼當它通過REGSVR32註冊原COM沒有在COM選項卡中列出在Add Reference對話框?
  2. 爲什麼VS IDE認爲它不是一個有效的COM,我可以從VBScript和C++本機代碼調用它?
  3. tlbimp究竟做了哪些IDE無法做到的事情?
  4. 爲了提高我對 類型庫和互操作性的理解,我需要進一步閱讀什麼內容?

回答

2

看起來像一個typelib問題 - 您的COM類可能已被正確註冊,但您的typelib可能不是。也許你忘了從你的DllRegisterServer函數中調用RegisterTypeLib?

參考您的問題:

  1. 對話框查找註冊類型庫,而不是COM類

  2. VBscript的調用IDispatch接口,並且不關心類型庫。 tlbimp不關心IDispatch並且需要一個typelib

  3. 您將DLL名稱傳遞給tlbimp - 因此tlbimp知道如何獲取typelib。相比之下,VS是指缺少適當註冊數據的註冊表

相關問題