2011-05-27 149 views
0

我想在託管C++程序中使用SHDOCVW。我已閱讀COM Interop using managed C++ - CodeProject。我使用How to add references to a managed Visual C++ project中的說明創建Interop.shdocvw.dll。我將該文件移至我的項目目錄。我正在使用VS 2010 Professional。我添加了:SHDOCVW在託管C++

#using "Interop.shdocvw.dll" 

我的程序。在我的計劃,我有:

SHDocVw::ShellWindows swList; 

我收到錯誤:

錯誤C2653:「SHDOCVW」:不是類或命名空間名稱

我也使用了「使用命名空間嘗試「但那也行不通。

我不會因此被發現將文件從使用#using得到一個錯誤。我假設我已經接近完成它的工作;我錯過了什麼?

回答

0

我想不通爲什麼,這並不工作,比其他的東西大大腳麻當您運行tlbimp.exe是實用。沒有必要這樣做,你也可以用IDE來做到這一點。

右鍵單擊該項目在解決方案資源管理器窗口,屬性,一般屬性,框架和參考。點擊添加新參考按鈕。瀏覽選項卡,導航到c:\ windows \ system32 \ shdocvw.dll。您現在應該可以毫無困難地使用SHDocVw命名空間。使用View +對象瀏覽器進行故障排除。

而且不要忘記,接口是引用類型,你需要的帽子:

SHDocVw::ShellWindows^ swList; 
+0

謝謝你,漢斯。 我下載了[ILSpy] [1]。它告訴我名字空間是Interop.shdocvw。當然,這是用於C++的Interop :: shdocvw。這工作。是的,我收到了消息「*不能在沒有頂級'^'*的情況下使用此類型」,因此,瞭解帽子並不需要很長時間。 感謝您提供添加參考的替代方法。我將來可能會這樣做。 所以現在我需要弄清楚如何讓事件掛鉤,但我相信這很容易,尤其是與使用非託管C++進行比較。 [1]:http://wiki.sharpdevelop.net/ilspy.ashx – 2011-05-30 02:19:14

+0

我知道你(漢斯)有最好的建議可能,我從別處認識你,可能是MSDN論壇。我是MSDN論壇中的SimpleSamples。 – 2011-05-30 02:21:39

0

從VC++ 2008開始,您不應該爲shdocvw.dll創建自己的interop程序集 - 類型庫導入程序以錯誤方式無法正確轉換許多簽名(尤其是事件的簽名),因此Microsoft開始手動發送 - 與VS 2008中的.NET框架進行了翻譯的互操作程序集,名爲Microsoft.mshtml.dll。

因此,擺脫Interop.shdocvw.dll並添加對Microsoft.mshtml.dll的引用,其內容位於命名空間::mshtml中。

+0

我改變Interop.shdocvw.dll移到Microsoft.mshtml.dll在using語句,但編譯器沒有找到它。我用雙引號和尖括號試了兩種。我搜索了我的系統中的Microsoft.mshtml.dll,並且在我的C:中找不到任何地方。我在MSDN上搜索了關於它的信息,但是我沒有在MSDN中找到任何說明它將被使用和從哪裏下載它的信息。 我無法找到在MSDN任何表示,ShellWindows是MSHTML的命名空間。你確定你打算說ShellWindows在mshtml命名空間嗎? – 2011-05-28 06:53:30

+0

@SamHobbs:哦,我認爲你需要'IWebBrowser'或其他一些HTML相關的功能;如果你需要'ShellWindows',那麼你確實需要自己導入類型庫。如果你想在命名空間中的文件名'Interop.shdocvw.dll'與內容'SHDocVw',然後運行這個命令:'TLBIMP shdocvw.dll中/out:Interop.shdocvw.dll /命名空間:SHDocVw' – ildjarn 2011-05-28 17:12:23