У меня есть ситуация, когда я хотел бы использовать некоторые методы, доступные через интерфейс IHTMLDocument7 , поставляемый с IE9. В частности, метод getElementsByTagNameNS (), потому что я хочу работать с определенными типами тегов (намного проще, чем анализировать весь документ).
Мой текущий код выглядит так:
IHTMLDocument2* doc = NULL;
if (browser->ControlInterface->Document) // make sure TCppWebBrowser is OK
{
if (SUCCEEDED(browser->ControlInterface->Document->QueryInterface(IID_IHTMLDocument2, (void**)&doc)))
{
IHTMLElement* body;
HRESULT hr = doc->get_body(&body);
if (SUCCEEDED(hr))
{
WideString innerHtml;
body->get_innerHTML(&innerHtml);
txtInfo->Text = innerHtml;
body->Release();
}
doc->Release();
}
}
Это работает и может иметь проблемы, но меня больше всего интересует получение нужной мне функциональности прямо сейчас.
Если я изменю этот код для использования нового интерфейса, доступного в IE9:
browser->ControlInterface->Document->QueryInterface(IID_IHTMLDocument7, (void**)&doc)
Я получаю следующую ошибку компилятора:
[BCC32 Error] Unit2.cpp(134): E2451 Undefined symbol 'IID_IHTMLDocument7'
Full parser context
Unit2.cpp(129): parsing: void _fastcall TForm2::Button4Click(TObject *)
[BCC32 Error] Unit2.cpp(134): E2285 Could not find a match for 'IUnknown::QueryInterface(undefined,void * *)'
Full parser context
Unit2.cpp(129): parsing: void _fastcall TForm2::Button4Click(TObject *)
Похоже, он не может найти соответствие для этого интерфейса.
- Что я должен сделать, чтобы сделать это
интерфейс доступен? Я угадываю
Версия Windows SDK поставляется с BCB
может быть устаревшим или не знает
о библиотеке типов для IE9
версия MSHTML.
- Есть ли способ
сделать соответствующие заголовки
доступно для этого интерфейса
(IID_IHTMLDocument7) и сохраните
TCppWebBrowserControl? Или мне нужно
импортировать отдельный элемент управления ActiveX?
Я использую C ++ Builder Starter XE (15.0.3953.35171) в Windows 7 (x64) с IE9.