【问题标题】:shdocvw in managed C++托管 C++ 中的 shdocvw
【发布时间】:2011-05-27 03:32:47
【问题描述】:

我正在尝试在托管 C++ 程序中使用 shdocvw。我读过COM Interop using managed C++ - CodeProject。我使用How to add references to a managed Visual C++ project 中的说明创建了 Interop.shdocvw.dll。我将文件移动到我的项目目录。我正在使用 VS 2010 专业版。我补充说:

#using "Interop.shdocvw.dll"

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

SHDocVw::ShellWindows swList;

我收到错误:

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

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

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

【问题讨论】:

    标签: com c++-cli managed tlbimp shdocvw


    【解决方案1】:

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

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

    别忘了接口是引用类型,你需要帽子:

     SHDocVw::ShellWindows^ swList;
    

    【讨论】:

    • 谢谢你,汉斯。我下载了 [ILSpy][1]。它告诉我命名空间是 Interop.shdocvw。当然那是 C++ 的 Interop::shdocvw。那行得通。是的,我收到消息“如果没有顶级 '^' 就无法在此处使用此类型”,因此我很快就了解了这顶帽子。感谢您提供添加参考的替代方法。我将来可能会这样做。所以现在我需要弄清楚如何连接事件,但我相信这很容易,尤其是与使用非托管 C++ 相比。 [1]:wiki.sharpdevelop.net/ilspy.ashx
    • 我知道你 (Hans) 有最好的建议,我从其他地方认识你,可能是 MSDN 论坛。我是 MSDN 论坛中的 SimpleSamples。
    【解决方案2】:

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

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

    【讨论】:

    • 我在 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
    猜你喜欢
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多