托管 C++ 中的 shdocvw
我正在尝试在托管 C++ 程序中使用 shdocvw。我已阅读使用托管 C++ 的 COM 互操作 - CodeProject。我使用了如何添加对托管 Visual C++ 项目的引用中的说明来创建 Interop.shdocvw。 dll。我将该文件移至我的项目目录。我使用的是 VS 2010 专业版。我添加:
#using "Interop.shdocvw.dll"
到我的程序中。在我的程序中,我有:
SHDocVw::ShellWindows swList;
我收到错误:
错误C2653:'SHDocVw':不是类或命名空间名称
我也尝试使用“使用命名空间”,但这也不起作用。
我没有从 #using 中收到错误,因此它正在查找该文件。我想我已经快要让它发挥作用了;我缺少什么?
I am trying to use shdocvw in a managed C++ program. I have read COM Interop using managed C++ - CodeProject. I used the instructions in How to add references to a managed Visual C++ project to create Interop.shdocvw.dll. I moved the file to my project directory. I am using VS 2010 Professional. I added:
#using "Interop.shdocvw.dll"
to my program. In my program I have:
SHDocVw::ShellWindows swList;
I am getting the error:
error C2653: 'SHDocVw' : is not a class or namespace name
I have also tried using a "using namespace" but that does not work either.
I am not getting an error from the #using so it is finding the file. I assume I am close to getting it to work; what am I missing?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我无法想象为什么这不起作用,除了当您运行 tlbimp.exe 实用程序时出现严重错误之外。不需要这样做,用IDE也可以。
右键单击“解决方案资源管理器”窗口中的项目、“属性”、“公共属性”、“框架”和“引用”。单击添加新参考按钮。浏览选项卡,导航到 c:\windows\system32\shdocvw.dll。您现在使用 SHDocVw 命名空间应该没有问题。使用视图 + 对象浏览器进行故障排除。
并且不要忘记接口是引用类型,您需要这顶帽子:
I cannot imagine why this doesn't work, other than something drastically going wrong when you ran the tlbimp.exe utility. There's no need to do this, you can also do it with the IDE.
Right-click the project in the Solution Explorer window, Properties, Common Properties, Framework and References. Click the Add New Reference button. Browse tab, navigate to c:\windows\system32\shdocvw.dll. You should now have no trouble using the SHDocVw namespace. Troubleshoot with View + Object Browser.
And don't forget that interfaces are reference types, you need the hat:
从 VC++ 2008 开始,您不应该为 shdocvw.dll 创建自己的互操作程序集 - 众所周知,类型库导入程序无法正确翻译许多签名(尤其是事件的签名),因此 Microsoft 开始发布手动翻译的互操作程序集VS 2008 中的 .NET 框架称为 Microsoft.mshtml.dll。
因此,删除 Interop.shdocvw.dll 并添加对 Microsoft.mshtml.dll 的引用,其内容位于命名空间
::mshtml
中。As of VC++ 2008, you shouldn't be creating your own interop assembly for shdocvw.dll -- the type library importer notoriously fails to correctly translate many of the signatures (especially those of events) so Microsoft started shipping a manually-translated interop assembly with the .NET framework in VS 2008 called Microsoft.mshtml.dll.
So, get rid of your Interop.shdocvw.dll and add a reference to Microsoft.mshtml.dll, the contents of which are in namespace
::mshtml
.