Как получить IHTMLDocument2 -> get_body -> get_innerHTML в строчную строку? - PullRequest
1 голос
/ 03 декабря 2010

Я пытаюсь получить innerHTML из тела веб-страницы на c ++, у меня пока есть это:

// I get "Document" from a parameter when calling this code
BSTR bstrContent = NULL;
IHTMLElement *p = 0;
Document->get_body( &p );

if( p )
{
    p->get_innerHTML( &bstrContent );
    p->Release();
}

Теперь мне нужно превратить bstrContent в строчную строку std :: string или LPSTR, я 'мы пробовали это:

LPSTR pagecontent = NULL;

int responseLength = (int)wcslen(bstrContent);
pagecontent = new CHAR[ responseLength + 1 ];
wcstombs( pagecontent, bstrContent, responseLength);

Но "pagecontent" не всегда содержит полный innerHTML, только первый блок.Я, даже если бы это работало, я не знаю, как легко сделать все это строчными буквами, с помощью std :: string я бы использовал «transform» + «tolower» для этого.

ТакКак я могу превратить bstrContent в std :: string?

Ответы [ 2 ]

0 голосов
/ 15 января 2011

std :: transform отлично работает, если у вас есть стартовый указатель и конечный указатель.Он работает со всем, что ведет себя как итераторы последовательности (квалифицируются обычные указатели).

0 голосов
/ 15 января 2011

Я не уверен, что полностью понимаю ваш вопрос. Я не знаю ни одной причины, по которой get_innerHTML мог бы дать вам неполное тело, но вы можете преобразовать BSTR в std :: string (при условии, что вам не нужно поддерживать Unicode, в этом случае вы должны были использовать std :: wstring в любом случае) с помощью функции, найденной на следующей странице:

http://www.codeguru.com/forum/showthread.php?t=275978

Если вы используете ATL, есть также утилита преобразования CA2W, но функция, с которой я вас связал, лучше, так как она, по крайней мере, будет поддерживать UTF8, если это необходимо.

Надеюсь, это поможет,

  • Taxilian
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...