我正试图在托管C++程序中使用shdocvw。我已经阅读了使用托管C++-CodeProject的COM互操作。我使用了"如何添加对托管Visual C++项目的引用"中的说明来创建Interop.shdocvw.dll。我将文件移到了我的项目目录中。我正在使用VS 2010 Professional。我补充道:
#using "Interop.shdocvw.dll"
我的程序。在我的程序中,我有:
SHDocVw::ShellWindows swList;
我得到错误:
错误C2653:"SHDocVw":不是类或命名空间名称
我也尝试过使用"using namespace",但这也不起作用。
我没有从#using中得到错误,所以它正在查找文件。我想我已经快要让它发挥作用了;我错过了什么?
我无法想象为什么这不起作用,除了在运行tlbimp.exe实用程序时出现严重错误之外。没有必要这样做,您也可以使用IDE来完成。
右键单击解决方案资源管理器窗口中的项目、属性、通用属性、框架和引用。单击"添加新引用"按钮。"浏览"选项卡,导航到c:\windows\system32\shdocvw.dll。您现在应该可以使用shdocvw命名空间了。使用"视图+对象浏览器"进行疑难解答。
别忘了接口是引用类型,你需要帽子:
SHDocVw::ShellWindows^ swList;
从VC++2008开始,您不应该为shdocvw.dll创建自己的互操作程序集——众所周知,类型库导入程序无法正确翻译许多签名(尤其是事件的签名),因此Microsoft开始在VS 2008中提供一个带有.NET框架的手动翻译的互操作组件,名为Microsoft.mshtml.dll。
因此,去掉Interop.shdocvw.dll,并添加对Microsoft.mshtml.dll的引用,其内容位于命名空间::mshtml
中。