Bonjour,
J'ai une exception lorsque je tente d’accéder à une interface de IWebBrowser2 depuis un autre thread que le thread dans lequel l'interface IWebBrowser2 à été crée.
Pour info, Le nouveau thread permet de lancer une recherche texte dans la page, donc multithread obligatoire...
Voici le code de la création de l'interface IWebBrowser2 :
Code C/C++ :
OleInitialize(0);
HINSTANCE hatldll = LoadLibrary(L"atl.dll");
typedef HRESULT (WINAPI *PAttachControl)(IUnknown*, HWND,IUnknown**);
PAttachControl AtlAxAttachControl = (PAttachControl) GetProcAddress(hatldll, "AtlAxAttachControl");
IWebBrowser2* pIWebBrowser2 = 0;
CoCreateInstance(CLSID_WebBrowser, 0, CLSCTX_ALL, IID_IWebBrowser2, (void**)&pIWebBrowser2);
AtlAxAttachControl(pIWebBrowser2, hwndDlg, 0);
Maintenant le code utilisé dans l'autre thread, l'exception se produit sur pIHTMLBodyElement->createTextRange :
Code C/C++ :
IDispatch* pIDispatch = 0;
pIWebBrowser2->get_Document(&pIDispatch);
IHTMLDocument2* pIHTMLDocument2 = 0;
pIDispatch->QueryInterface(IID_IHTMLDocument2, (void **)&pIHTMLDocument2);
pIDispatch->Release();
IHTMLElement* pIHTMLElement = 0;
pIHTMLDocument2->get_body(&pIHTMLElement);
pIHTMLDocument2->Release();
IHTMLBodyElement* pIHTMLBodyElement = 0;
pIHTMLElement->QueryInterface(IID_IHTMLBodyElement, (void**)&pIHTMLBodyElement);
pIHTMLElement->Release();
IHTMLTxtRange* pIHTMLTxtRange = 0;
pIHTMLBodyElement->createTextRange(&pIHTMLTxtRange); //exception ici
Il doit surement y avoir quelque chose à faire pour utiliser l'interface dans un autre thread mais je ne vois pas quoi.
++