Com 管理C++中的SHDOWVW 我试图在管理C++程序中使用SHDOWVW。我读过。我使用中的说明创建Interop.shdocvw.dll。我将文件移到了我的项目目录中。我正在使用VS2010专业版。我补充说: #using "Interop.shdocvw.dll"

Com 管理C++中的SHDOWVW 我试图在管理C++程序中使用SHDOWVW。我读过。我使用中的说明创建Interop.shdocvw.dll。我将文件移到了我的项目目录中。我正在使用VS2010专业版。我补充说: #using "Interop.shdocvw.dll",com,c++-cli,managed,tlbimp,shdocvw,Com,C++ Cli,Managed,Tlbimp,Shdocvw,我的节目。在我的计划中,我有: SHDocVw::ShellWindows swList; 我得到一个错误: 错误C2653:“SHDocVw”:不是类或命名空间名称 我也尝试过使用using名称空间,但这也不起作用 我没有从使用中得到错误,因此它正在查找文件。我想我已经接近让它工作了;我缺少什么?从VC++2008开始,您不应该为shdocvw.dll创建自己的互操作程序集-众所周知,类型库导入程序无法正确转换许多签名,尤其是事件的签名,因此Microsoft开始在VS 2008中使用名为M

我的节目。在我的计划中,我有:

SHDocVw::ShellWindows swList;
我得到一个错误:

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

我也尝试过使用using名称空间,但这也不起作用


我没有从使用中得到错误,因此它正在查找文件。我想我已经接近让它工作了;我缺少什么?

从VC++2008开始,您不应该为shdocvw.dll创建自己的互操作程序集-众所周知,类型库导入程序无法正确转换许多签名,尤其是事件的签名,因此Microsoft开始在VS 2008中使用名为Microsoft.mshtml.dll的.NET framework提供手动翻译的互操作程序集


因此,请删除Interop.shdocvw.dll并添加对Microsoft.mshtml.dll的引用,其内容位于namespace::mshtml中。

我无法想象这为什么不起作用,除了运行tlbimp.exe实用程序时出现了一些严重的问题。没有必要这样做,你也可以用IDE来做

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

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

 SHDocVw::ShellWindows^ swList;

我在using语句中将Interop.shdocvw.dll更改为Microsoft.mshtml.dll,但编译器没有找到它。我试过用双引号和尖括号。我在我的系统中搜索了Microsoft.mshtml.dll,但在我的C:中找不到它。我在MSDN中搜索了有关它的信息,但在MSDN中没有找到任何说明它将被使用或从Microsoft下载到哪里的内容。我在MSDN中找不到任何说明ShellWindows位于mshtml命名空间中的内容。你确定你的意思是说ShellWindows在mshtml命名空间中吗?@SamHobbs:哦,我想你需要IWebBrowser或其他与HTML相关的功能;如果您需要ShellWindows,那么您确实需要自己导入类型库。如果希望文件名Interop.shdocvw.dll包含命名空间shdocvw中的内容,请运行以下命令:tlbimp shdocvw.dll/out:Interop.shdocvw.dll/namespace:shdocvw谢谢,Hans。我下载了[ILSpy][1]。它告诉我名称空间是Interop.shdocvw。当然,这是互操作::C++的SHDOWVW。成功了。是的,我收到的消息是,如果没有顶级“^”的话,我就不能在这里使用这种类型的帽子,所以我很快就了解了这顶帽子。感谢您提供添加引用的替代方法。我将来可能会这样做。所以现在我需要弄清楚如何使事件挂钩,但我确信这将是容易的,特别是与使用非托管C++进行比较时。[1] 当前位置我知道你有最好的建议,我从其他地方认识你,可能是MSDN论坛。我是MSDN论坛中的SimpleSamples。