如何获取 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
Select MSHTML 程序集引用,查看它的路径 属性 就会发现问题:
C:\WINDOWS\assembly\GAC\Microsoft.mshtml.0.3300.0__b03f5f7f11d50a3a\Microsoft.mshtml.dll
这是 mshtml 类型库的 PIA,安装在任何安装了 VS 的程序员机器上。 Version 7.0.3300是.NET 1.0时代的一个版本号,已经14岁了。当然早于 IE11,这就是为什么它没有后来的接口类型。使用 PIA 永远不会是错误的事情,它确保您的程序将 运行 与任何版本的 IE,一直回到 IE6。
但这不是您想要的,您必须从 IE11 类型库生成您自己的互操作库。 运行 Visual Studio 命令提示符,导航到您的项目目录并键入此命令:
Tlbimp c:\windows\system32\mshtml.tlb /out:Interop.mshtml.dll
它会运行dle 很长一段时间,它很大,并吐出几个关于 PIA 存在的警告和几个不能直接从 .NET 中使用的晦涩方法和类型程序。你可以忽略它们,它们在 PIA 中也不起作用。
您现在的项目目录中有 Interop.mshtml.dll 文件。返回 VS,删除旧的 MSHTML 引用并使用“项目”>“添加引用”>“浏览”到 select 您刚刚创建的新引用。它的 "Embed Interop Types" 属性 默认为 True,不再需要 PIA 并且您不必使用程序部署该文件。将文件签入源代码管理,这样您只需执行一次。
请注意,当您的程序 运行 在未安装所需版本的 IE 的计算机上时,它可能会因 E_NOINTERFACE 异常而终止。您可以使用 as
运算符将文档引用转换为 IHtmlDocument7,如果 IE 较旧,它将为 null。
我在 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
Select MSHTML 程序集引用,查看它的路径 属性 就会发现问题:
C:\WINDOWS\assembly\GAC\Microsoft.mshtml.0.3300.0__b03f5f7f11d50a3a\Microsoft.mshtml.dll
这是 mshtml 类型库的 PIA,安装在任何安装了 VS 的程序员机器上。 Version 7.0.3300是.NET 1.0时代的一个版本号,已经14岁了。当然早于 IE11,这就是为什么它没有后来的接口类型。使用 PIA 永远不会是错误的事情,它确保您的程序将 运行 与任何版本的 IE,一直回到 IE6。
但这不是您想要的,您必须从 IE11 类型库生成您自己的互操作库。 运行 Visual Studio 命令提示符,导航到您的项目目录并键入此命令:
Tlbimp c:\windows\system32\mshtml.tlb /out:Interop.mshtml.dll
它会运行dle 很长一段时间,它很大,并吐出几个关于 PIA 存在的警告和几个不能直接从 .NET 中使用的晦涩方法和类型程序。你可以忽略它们,它们在 PIA 中也不起作用。
您现在的项目目录中有 Interop.mshtml.dll 文件。返回 VS,删除旧的 MSHTML 引用并使用“项目”>“添加引用”>“浏览”到 select 您刚刚创建的新引用。它的 "Embed Interop Types" 属性 默认为 True,不再需要 PIA 并且您不必使用程序部署该文件。将文件签入源代码管理,这样您只需执行一次。
请注意,当您的程序 运行 在未安装所需版本的 IE 的计算机上时,它可能会因 E_NOINTERFACE 异常而终止。您可以使用 as
运算符将文档引用转换为 IHtmlDocument7,如果 IE 较旧,它将为 null。