В последнее время я работаю с MSHTML API, и мне это очень неудобно. Я больше привык к WinAPI, а затем программированию COM, поэтому, возможно, это только я, но рассмотрим следующий пример запроса прямоугольника элемента;Ищет оболочку MSHTML для C++
Ожидания:
RECT rc;
hr = element2->GetElementRect(&rc);
Реальность:
CComPtr<IHTMLRect> rect;
hr = element2->getBoundingClientRect(&rect);
if(FAILED(hr))
return hr;
if(!rect)
return E_FAIL;
long left, right, top, bottom;
hr = rect->get_left(&left);
if(FAILED(hr))
return hr;
hr = rect->get_right(&right);
if(FAILED(hr))
return hr;
hr = rect->get_top(&top);
if(FAILED(hr))
return hr;
hr = rect->get_bottom(&bottom);
if(FAILED(hr))
return hr;
ли я что-то не хватает?
Мой вопрос: Есть ли какие-либо обертки для этого API? Разумеется, умные указатели, такие как CComPtr
, делают вещи намного проще, но тем не менее я чувствую, что борюсь с API.
Выглядит очень многообещающе, спасибо! Я никогда не видел использование #import раньше. Является ли этот API документированным где угодно? Что происходит при ошибке, вызывает ли это исключение? Убирают ли переменные при уничтожении? – Paul
Вы обнаруживаете '# import' в [документации MSDN] (http://msdn.microsoft.com/en-us/library/8etzzkb6.aspx). ['_com_ptr_t'] (http://msdn.microsoft.com/en-us/library/417w8b3b.aspx) - это умный указатель, поэтому он в любом случае правильно очищает. –
Да, это именно то, что я искал, спасибо! Чтобы ответить на мой последний оставшийся без ответа вопрос: «Что происходит при ошибке, вызывает ли это исключение?» - Да, '_com_error'. – Paul