Как да накарам IHTMLDocument2 -›get_body -›get_innerHTML в низ с малки букви?

Опитвам се да получа 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?


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


Отговори (2)


Не съм сигурен, че разбирам напълно въпроса ви. Не знам каквато и да е причина get_innerHTML да ви даде непълно тяло, но можете да конвертирате BSTR в std::string (ако приемем, че не е необходимо да поддържате unicode, в който случай трябваше да използвате 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