C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как в IHTMLWindow2 загрузить файл с диска
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 лишь малая часть исходного документа, почему так ?wink.gif
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 лишь малая часть исходного документа, почему так ?wink.gif

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 килобайт) то все работает ок. wink.gif

Вернуться в Вопросы программирования в C++Builder