0

我正在尝试在托管 C++ 程序中使用 shdocvw。我已经阅读了使用托管 C++ - CodeProject 的 COM 互操作。我使用了如何添加对托管 Visual C++ 项目的引用中的说明来创建 Interop.shdocvw.dll。我将文件移动到我的项目目录。我正在使用 VS 2010 专业版。我补充说:

#using "Interop.shdocvw.dll"

到我的程序。在我的程序中,我有:

SHDocVw::ShellWindows swList;

我收到错误消息:

错误 C2653:“SHDocVw”:不是类或命名空间名称

我也尝试过使用“使用命名空间”,但这也不起作用。

我没有从#using 中得到错误,所以它正在查找文件。我想我已经接近让它工作了;我错过了什么?

4

2 回答 2

0

从 VC++ 2008 开始,您不应该为 shdocvw.dll 创建自己的互操作程序集——众所周知,类型库导入器无法正确翻译许多签名(尤其是事件的签名),因此 Microsoft 开始发布手动翻译的互操作程序集使用 VS 2008 中名为 Microsoft.mshtml.dll 的 .NET 框架。

因此,摆脱您的 Interop.shdocvw.dll 并添加对 Microsoft.mshtml.dll 的引用,其内容位于 namespace 中::mshtml

于 2011-05-27T13:51:39.363 回答
0

我无法想象为什么这不起作用,除了运行 tlbimp.exe 实用程序时出现严重错误。无需这样做,您也可以使用 IDE 进行操作。

右键单击解决方案资源管理器窗口中的项目、属性、通用属性、框架和引用。单击添加新引用按钮。浏览选项卡,导航到 c:\windows\system32\shdocvw.dll。您现在应该可以毫无问题地使用 SHDocVw 命名空间。使用视图 + 对象浏览器进行故障排除。

并且不要忘记接口是引用类型,你需要帽子:

 SHDocVw::ShellWindows^ swList;
于 2011-05-28T20:51:23.097 回答