Здравствуйте есть такая проблем пытаюсь вызвать скрип на html страничке вот код вызова скрипта
| Код | void CDHTMLSpyView::OnCallscript2(OLECHAR* name,char *param) { HRESULT hr; LPDISPATCH pDispatch = GetHtmlDocument(); if( pDispatch == NULL ) return; IHTMLDocument* pHtmlDoc; hr = pDispatch->QueryInterface( __uuidof( IHTMLDocument ), (void**)&pHtmlDoc );
LPDISPATCH pScript; pHtmlDoc->get_Script( &pScript); pScript->AddRef(); if (SUCCEEDED(hr)) { // Получаем DISPID интересуемой функции OLECHAR* szMember=name; DISPID dispid;
HRESULT hr = pScript->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if (SUCCEEDED(hr)) { // Выполняем COleVariant vtResult; static BYTE parms[] = VTS_BSTR;
COleDispatchDriver dispDriver(pScript); dispDriver.InvokeHelper(dispid, DISPATCH_METHOD, VT_VARIANT, (void*)&vtResult, parms, param); } } pScript->Release(); pHtmlDoc->Release(); pDispatch->Release();
}
|
Если вызов происходит в основном приложении то все вызываеться и выполняеться, а если я создаю поток и в нем пытаюсь вызвать скрипт то происходит ошибка такого типа Debug Assertion Failed! File: viewhtml.cpp Line: 796 врт код на который он ругаеться
| Код | LPDISPATCH CHtmlView::GetHtmlDocument() const { ASSERT(m_pBrowserApp != NULL);<-----------Вот на эту строку
LPDISPATCH result; HRESULT hr = m_pBrowserApp->get_Document(&result); if(FAILED(hr)) { ASSERT(FALSE); return NULL; } return result; }
|
Функция потока у меня такая
| Код | DWORD WINAPI CDHTMLSpyView::Enter_Summ(LPVOID lpv){ СDHTMLSpyView ret; ret.OnCallscript2(L"Enter_Sum","500") return 0; }
|
Вызываю поток через функцию [code=cpp] CreateThread(NULL,0, &CDHTMLSpyView::Enter_Summ,0,0,NULL) |