2010-12-03 4 views
1

Ich versuche, die innerHTML- von einer Webseite Körper auf c zu bekommen ++, ich habe dies bisher:Wie bekomme ich IHTMLDocument2 -> get_body -> get_innerHTML in einen Kleinbuchstaben?

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

Jetzt muss ich bstrContent in einem Klein std :: string oder LPSTR drehen, habe ich schon versucht, diese :

LPSTR pagecontent = NULL; 

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

Aber "pagecontent" enthält nicht immer die vollständige innerHTML, nur ein erster Chunk. Selbst wenn es funktionierte, ich weiß nicht, wie man es leicht in Kleinbuchstaben umwandelt, mit einer std :: string würde ich "transform" + "tolower" dazu verwenden.

Also, wie kann ich BstrContent in eine Std :: String?

Antwort

0

Ich bin mir nicht sicher, ob ich Ihre Frage vollständig verstehe. Ich kenne keinen Grund, warum get_innerHTML Ihnen einen unvollständigen Körper geben würde, aber Sie können einen BSTR in einen std :: string konvertieren (vorausgesetzt, Sie müssen Unicode nicht unterstützen, in diesem Fall hätten Sie eine std verwenden sollen) :: wstring sowieso) mit einer Funktion auf der folgenden Seite:

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

Wenn Sie ATL verwenden es auch das Konvertierungsprogramm CA2W ist, aber die Funktion I verknüpfen Sie ist besser, da es werde zumindest UTF8 unterstützen, falls relevant.

Hoffnung, die hilft,

  • Taxilian
0

std :: transformieren funktioniert gut, wenn Sie einen Start-Zeiger und eine End-Zeiger haben, auch. Es funktioniert mit allem, was sich als Sequenz-Iteratoren verhält (reguläre Zeiger qualifizieren sich).