繁体   English   中英

如何获取mshtml.IHTMLDocument6或mshtml.IHTMLDocument7?

[英]How to get mshtml.IHTMLDocument6 or mshtml.IHTMLDocument7?

我在Windows 7中使用IE11。然后我在C#项目c:\\ Windows \\ System32 \\ mshtml.tld中添加了一个引用并尝试获取mshtml.IHTMLDocument6或mshtml.IHTMLDocument7,但是VS2013没有看到它。 我只能得到mshtml.IHTMLDocument,mshtml.IHTMLDocument2 .. mshtml.IHTMLDocument5。

IHTMLDocument7接口https://msdn.microsoft.com/ru-ru/library/windows/hardware/ff975572

选择MSHTML程序集引用,查看其Path属性,您将看到问题:

C:\\ Windows \\组件\\ GAC \\ Microsoft.mshtml \\ 7.0.3300.0__b03f5f7f11d50a3a \\ Microsoft.mshtml.dll

这是mshtml类型库的PIA,安装在安装了VS的任何程序员的机器上。 版本7.0.3300是.NET 1.0时代的版本号,已有14年历史。 当然,预测IE11,这就是为什么它没有后来的接口类型。 使用PIA永远不是错误的事情,它确保您的程序可以运行任何版本的IE,一直回到IE6。

但这不是你想要的,你必须从IE11类型库生成自己的互操作库。 运行Visual Studio命令提示符,导航到项目目录并键入以下命令:

  Tlbimp c:\windows\system32\mshtml.tlb /out:Interop.mshtml.dll

它会拖延很长一段时间,它是一个很大的问题,并且会出现几个关于PIA存在的警告以及几个不能直接从.NET程序中使用的模糊方法和类型。 你可以忽略它们,它们也不适用于PIA。

您现在在项目目录中有Interop.mshtml.dll文件。 返回VS,删除旧的MSHTML引用并使用Project> Add Reference> Browse选择刚刚创建的新引用。 默认情况下,它的“嵌入互操作类型”属性为True,根本不再需要PIA,您不必在程序中部署该文件。 将文件检入源代码管理,这样您只需执行一次。

并且要小心,当程序在没有安装所需IE版本的计算机上运行时,程序可能会因E_NOINTERFACE异常而死亡。 您可以使用as运算符将文档引用强制转换为IHtmlDocument7,如果IE旧了则它将为null。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM