Guest |
Отправлено: 30.01.2006, 23:12 |
|
Не зарегистрирован
|
Как в IHTMLWindow2 загрузить файл с диска |
|
Guest |
Отправлено: 31.01.2006, 16:19 |
|
Не зарегистрирован
|
QUOTE (Guest @ 30/01/2006, 23:12) | Как в IHTMLWindow2 загрузить файл с диска |
IHTMLWindow2, ничего не попутал? |
|
Guest |
Отправлено: 02.02.2006, 18:30 |
|
Не зарегистрирован
|
QUOTE |
IHTMLWindow2, ничего не попутал?
|
В целом я не прав, документ нужно загружать в IHTMLDocument2 я вроде бы даже придумал как
CODE |
IPersistFile *PersistFile=NULL;
FileName="D:\index.html";
CComPtr<IHTMLDocument2> pDoc;
if(CoCreateInstance( CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER, IID_IHTMLDocument2, (LPVOID*)&pDoc)==S_OK)
if(pDoc->QueryInterface(IID_IPersistFile,(LPVOID*)&PersistFile)==S_OK)
if(PersistFile->Load(_bstr_t(FileName),STGM_READWRITE)==S_OK))
if(pDoc->get_body(&BODY)==S_OK)
BODY->get_innerText(&Text);
|
но возникает ошибка при вызове функции get_innerText я проверил что считала функция Load путем PersistFile->Save(L"C:\INDEX.html",false); и оказалось что в сохраненном файле INDEX.html лишь малая часть исходного документа, почему так ? |
|
Guest |
Отправлено: 03.02.2006, 11:06 |
|
Не зарегистрирован
|
QUOTE (Guest @ 02/02/2006, 18:30) | QUOTE |
IHTMLWindow2, ничего не попутал?
|
В целом я не прав, документ нужно загружать в IHTMLDocument2 я вроде бы даже придумал как
CODE |
IPersistFile *PersistFile=NULL;
FileName="D:\index.html";
CComPtr<IHTMLDocument2> pDoc;
if(CoCreateInstance( CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER, IID_IHTMLDocument2, (LPVOID*)&pDoc)==S_OK)
if(pDoc->QueryInterface(IID_IPersistFile,(LPVOID*)&PersistFile)==S_OK)
if(PersistFile->Load(_bstr_t(FileName),STGM_READWRITE)==S_OK))
if(pDoc->get_body(&BODY)==S_OK)
BODY->get_innerText(&Text);
|
но возникает ошибка при вызове функции get_innerText я проверил что считала функция Load путем PersistFile->Save(L"C:\INDEX.html",false); и оказалось что в сохраненном файле INDEX.html лишь малая часть исходного документа, почему так ? |
CODE |
TFileStream *f = new TFileStream(FileName, fmOpen);
String sWholeFile;
f->Read(sWholeFile.c_str()), f->Size);
delete f;
IHTMLDocument2Ptr pDoc;
HRESULT hr = CoCreateInstance(CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER,
IID_IHTMLDocument2, (void**)&pDoc);
SAFEARRAY* psa = SafeArrayCreateVector(VT_VARIANT, 0, 1);
VARIANT *param;
WideString wsData (sWholeFile);
hr = SafeArrayAccessData(psa, (LPVOID*)¶m);
param->vt = VT_BSTR;
param->bstrVal = wsData;
hr = pDoc->write(psa);
hr = pDoc->close();
SafeArrayDestroy(psa);
| |
|
Guest |
Отправлено: 03.02.2006, 18:58 |
|
Не зарегистрирован
|
QUOTE |
TFileStream *f = new TFileStream(FileName, fmOpen);
String sWholeFile;
f->Read(sWholeFile.c_str()), f->Size);
delete f;
IHTMLDocument2Ptr pDoc;
HRESULT hr = CoCreateInstance(CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER,
IID_IHTMLDocument2, (void**)&pDoc);
SAFEARRAY* psa = SafeArrayCreateVector(VT_VARIANT, 0, 1);
VARIANT *param;
WideString wsData (sWholeFile);
hr = SafeArrayAccessData(psa, (LPVOID*)¶m);
param->vt = VT_BSTR;
param->bstrVal = wsData;
hr = pDoc->write(psa);
hr = pDoc->close();
SafeArrayDestroy(psa);
|
Что та данный способ загрузки файла глючит , во первых при первом запуске функция BODY->get_innerText(&Text); ничего не возвращает ,а при повторном вызове уже pDoc->write(psa); выдает ошибку и только после перегрузки компа снова удается дойти до функции get_innerText, хотя если размер файла небольшой (меньше 20 килобайт) то все работает ок. |
|
|