|
TWebBrowser 에 동적으로 할당된 유니코드 문자열을 보여주려 합니다.
검색결과 아래 두가지 방법으로 정상 동작 합니다만..... [ǝnd, ǝn] 와 같은 유니코드가 깨져(물음표로) 보이네요.
어찌 풀어야 할까요? 도움 기다립니다.
AnsiString HTML = ㅣ"★ ⑴ 100자리 다음에 and [ǝnd, ǝn]가 옴. 그러나 美에서는 종종 생략. ⑵ 100의 자리가 0일 때는 1,000자리 다음에 and가 옴.";
// 1번째 방법
WebBrowser1->Navigate(L"about:blank");
while(WebBrowser1->Busy) Application->ProcessMessages();
TMemoryStream* mstm = new TMemoryStream();
mstm->Write(HTML.c_str(), HTML.Length());
mstm->Seek(0, soFromBeginning);
IPersistStreamInit* pPersistStreamInit = NULL;
TStreamAdapter *IStr = new TStreamAdapter(mstm, soReference);
WebBrowser1->Document->QueryInterface(IID_IPersistStreamInit, (void**)&pPersistStreamInit);
pPersistStreamInit->Load(*IStr);
pPersistStreamInit->Release();
pPersistStreamInit = NULL;
delete mstm;
// 2번째 방법
WebBrowser1->Navigate(L"about:blank");
while(WebBrowser1->ReadyState != Shdocvw::READYSTATE_COMPLETE) Application->ProcessMessages();
HANDLE hMem = GlobalAlloc(GMEM_MOVEABLE | GMEM_NODISCARD, HTML.Length());
if(!hMem ) return;
void *ptr = GlobalLock(hMem);
memcpy(ptr, HTML.c_str(), HTML.Length());
GlobalUnlock(hMem);
TComInterface<IStream> pStream;
if( FAILED(CreateStreamOnHGlobal(hMem, TRUE, &pStream))){
GlobalFree(hMem);
return ;
}
TComInterface<IPersistStreamInit> pPersistStreamInit;
if(FAILED(WebBrowser1->Document->QueryInterface(IID_IPersistStreamInit, (void**)&pPersistStreamInit))) return;
SUCCEEDED(pPersistStreamInit->Load(pStream));
|