Как преобразовать IHTMLDocument2 ->get_body ->get_innerHTML в строчную строку?

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

// 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);

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

Итак, как мне превратить bstrContent в std::string?


person Hurans    schedule 03.12.2010    source источник


Ответы (2)


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

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

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

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

  • Таксилиан
person taxilian    schedule 15.01.2011

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

person Jon Watte    schedule 15.01.2011