DWORD WINAPI ExtractDocObj (LPVOID pCWB)
{
TCppWebBrowser *CWB = (TCppWebBrowser*)pCWB;
if (CWB->Document == NULL) return 1;
CComPtr<IHTMLDocument2>spDoc;
CComPtr<IHTMLElementCollection>spImgCol;
CComPtr<IHTMLEmbedElement>spEmbEl;
CComPtr<IDispatch>spDisp;
CWB->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&spDoc);
if (!spDoc) return 1;
spDoc->get_images(&spImgCol);
spDoc->get_embeds(&spEmbCol);
long Img_ln, Emb_ln;
spImgCol->get_length(&Img_ln);
spEmbCol->get_length(&Emb_ln);
VARIANT ind;
ind.vt = VT_I4;
WideString src;
for (long i=0; i<Emb_ln; i++) // EMBED's
{
ind.lVal = i;
spEmbCol->item(ind,ind, &spDisp);
if (!spDisp)continue;
spDisp->QueryInterface(IID_IHTMLEmbedElement, (LPVOID*)&spEmbEl);
spEmbEl->get_src(&src);
spDisp.Release();
spEmbEl.Release();
DM->ObjQuery->Active = false;
DM->ObjQuery->Parameters->ParamByName("@Key")->Value = MainForm->ExtractObjId (String(src));
if (!(FileExists(MainForm->ProgramPatch() + String(src))) && !(FileExists(MainForm->ProgramPatch() + String(src))) && !(FileExists(MainForm->ProgramPatch() + String(src))))
DM->ObjQuery->Active = true;
Application->ProcessMessages();
if (DM->ObjQuery->Active) DM->ObjQueryObjBody->SaveToFile(MainForm->ProgramPatch() + "media\\"+ DM->ObjQueryId->AsString + DM->ObjQueryObjName->AsString);
}
return 0;
}
Доступ к объектам TCppWebBrowser в отдельном потоке
Код:
вызываю ее отдельным потоком в событии TCppWebBrowser::NavigateComplete2
Код:
CreateThread( NULL , 0 , ExtractDocObj, WB , 0 , NULL );
пока функция ExtractDocObj вызывалась вне потока, все нормально работало
в потоке при пробеге коллекции документа в spDisp
spEmbCol->item(ind,ind, &spDisp);
передается только с 3-го раза (в лучшем случае)
В чем может быть проблема?