2016-07-26 15 views

回答

5

選擇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來選擇剛剛創建的新的。默認情況下,它的「Embed Interop Types」屬性爲True,不再需要PIA,而且您不必在程序中部署該文件。將文件檢入源代碼控制,所以你只需要做一次。

並且要小心,當您的程序在沒有安裝所需版本IE的計算機上運行時,可能會因E_NOINTERFACE異常而死亡。您可以使用as運算符將文檔引用強制轉換爲IHtmlDocument7,如果IE是舊的,則它將爲空。

+0

謝謝)是否有可能將IHTMLElement轉換爲HTMLElement或者我需要創建另一個問題? – askeet

相關問題