J'avais déjà répondu à cela il y a peu.
dans WinMain: if(S_OK != CoInitializeEx(NULL, COINIT_MULTITHREADED)) return 0;
dans bouton, exemple issu de mon taf: hthread = CreateThread(0, 0, MdbStructThread,...);
DWORD WINAPI MdbStructThread(PVOID pvPrm) { ExtractStructDB((LPANALYDATA)pvPrm); PostMessage(((LPANALYDATA) pvPrm)->hDlg, WM_ANALYSEND, 0, 0); return 0; } void ExtractStructDB(LPANALYDATA pData) { DWORD dwWrite; _ConnectionPtr pConnDB = NULL; _RecordsetPtr pRs, pSchemaRs; FieldPtr pFld; long i, nFlds, lType, bRet = 1; _bstr_t bst("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="); _variant_t varIdx; bst += pData->szMdb; if(pData->szPsswrd[0]) {bst += ";Jet OLEDB:Database Password="; bst += pData->szPsswrd;} try { TESTHR(pConnDB.CreateInstance(__uuidof(Connection))); TESTHR(pRs.CreateInstance(__uuidof(Recordset))); pConnDB->Mode = adModeShareExclusive; pConnDB->Open(bst, "", "", NULL); } catch(_com_error &e) {MsgAdoError(pData->hDlg, e); return;}
ETC...... }
et voilà ADO en thread et va impec.
ciao... BruNews, MVP VC++
|