2011-05-27 148 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