2010-01-05 67 views
1

我創建了一個名爲「WSdll.dll」的vb.net dll。 我編譯它,創建一個類型庫(tlb),並在全局註冊它(gacutil)。 它包含一個名爲wsutils.vb的文件,其中包含名爲「wsutils」的名稱空間。 在名稱空間中,有一個名爲「IWSconnection」的接口(帶有屬性)和一個名爲「WSconnection」的類。 接口和類是公共的,所有的方法和屬性都是公共的。在非託管C++項目中使用vb.net dll

然後我試圖在一個非託管的C++項目中實現它。

我進口它:#進口 「.. \ WSdll \ WSdll \ BIN \調試\ WSdll.tlb」 \ raw_interfaces_only,\ named_guids,\ no_namespace

然後試圖創建一個實例: CComPtr < IWSconnection> pIWSconnection; pIWSconnection.CoCreateInstance(__uuidof(wsutils :: WSconnection));

我得到2個錯誤一)wsutils是不是一個類或命名空間名稱B)wsconnection未聲明的標識符

哪些其他措施做我必須做的就是該dll在這裏工作?

TIA

+0

您拼寫爲「原生」錯誤 – 2010-01-05 20:41:44

回答

1

你把no_namespace在#import語句 - 所以你的對象是不是在wsutils命名空間,它是在全局命名空間。從#import行刪除no_namespace,或從對象創建行刪除wsutils ::。

+0

非常感謝!這工作。現在,我還有另一個問題: 我使用以下命令創建對象: CComPtr pIWSconnection; pIWSconnection.CoCreateInstance(__uuidof(IWSconnection)); 然後,當我試圖調用一個方法: pIWSconnection.connect(...) 我得到一個錯誤: pIWSconnection未聲明的標識符 爲什麼會用「的CoCreateInstance的工作,而不是與「連接」? – user228058 2010-01-06 16:15:06

+0

首先,你應該pIWSconnection->連接。順便說一下,爲什麼混合ATL智能指針(CComPtr)和Native COM? – 2010-02-11 17:22:35

1

您的VB.NET代碼中使用的名稱空間名稱對COM客戶端不可見。只需省略wsutils ::前綴即可。無論何時您懷疑#import的名稱是什麼樣子,請使用您的編輯器打開自動生成的.tlh和.tli文件。

+0

默認情況下,#import將所有接口和類放入與typelib名稱(內部名稱,不是文件名)匹配的名稱空間中。其中,默認情況下,它與生成的.NET typelib的項目名稱相匹配。默認情況下,它是.NET項目中所有類的默認命名空間。 :) 無論如何,錯誤是關於名稱空間不匹配。 – 2010-01-05 21:56:11

相關問題