Как получить mshtml.IHTMLDocument6 или mshtml.IHTMLDocument7?

Я использую IE11 в Windows 7. Затем я добавил ссылку в проект 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

1 ответ

Решение

Выберите ссылку на сборку MSHTML, посмотрите ее свойство Path, и вы увидите проблему:

C: \ WINDOWS \ сборка \GAC\Microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a\Microsoft.mshtml.dll

Это PIA для библиотеки типов mshtml, установленной на компьютере любого программиста, на котором установлена ​​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 и используйте "Проект"> "Добавить ссылку"> "Обзор", чтобы выбрать новую, которую вы только что создали. Его свойство "Embed Interop Types" по умолчанию имеет значение True, больше не требует PIA, и вам не нужно развертывать файл с вашей программой. Проверьте файл в системе контроля версий, так что вам нужно будет сделать это только один раз.

И будьте осторожны, ваша программа может умереть с исключением E_NOINTERFACE, когда она запускается на компьютере, на котором не установлена ​​необходимая версия IE. Вы можете использовать as Оператор для приведения ссылки на документ к IHtmlDocument7 будет пустым, если IE старый.

Другие вопросы по тегам