簡體   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