zenon |
опубликован 11-04-2001 05:47 MSK
Возможно, кому-то это покажется ерундой, но я такое вижу впервые. Суть в следующем: есть массив объектов СMyObject. Каждый из этих обьектов содержит данные, скажем, на человека. Упрощенно, как бы телефонный справочник. Данный массив отображается с помощью CListCtrl. Все нормально работает. Добавил запись в обьекты СMyObject из Access'а с помощью ADO, и стала происходить интересная вещь. Загрузка данных нормально происходит, но когда я закрываю приложение, выскакивает "Программа выполнила недопустимую ошибку..." и в подробностях, значит, написано, что сбой произошел в модуле User32.dll. Самое интересное, что эта ошибка может вылезти, а может и не вылезти. На двадцать запусков программы с точным повторением всех действий один-два раза выскакивает эта ошибка. Никакой закономерности не смог определить. Я ни разу еще не вызывал сбой в User32.dll, все обычно в mfc...dll. И ни какой закономерности! Руки, конечно, мне править нужно. Только куда? Может кто-нибудь намекнет, в какую сторону думать. Большое спасибо. Если кому-то не надоело читать мое занудство, то вот кусок кода запроса к базе данных (обычный вроде код из MSDN). C ним, должно быть, это связано. Упрощенно:void CMyDoc::ImportFromDB(CString str) // Запрос я формирую в другом месте { HRESULT hr = S_OK; if(FAILED(::CoInitialize(NULL))) return; _ConnectionPtr pConn = NULL; _RecordsetPtr pRs = NULL; try { pConn.CreateInstance(__uuidof(Connection)); pRs.CreateInstance(__uuidof(Recordset)); pConn->Open("Personal","","",adConnectUnspecified); _bstr_t strQuery(str); pRs->Open(strQuery, _variant_t((IDispatch*)pConn,true), adOpenStatic, adLockReadOnly, adCmdText); pRs->MoveFirst(); if( pRs->EndOfFile ) { AfxMessageBox("Recordset empty"); } else { CString sLname; _bstr_t bstrLname; while(!(pRs->EndOfFile)) { // Cколько строчек в Access'е, столько, значит, и новых CMyObject bstrLname = pRs->Fields->GetItem("lname")->Value; sLname.Format("%s",(LPCSTR)bstrLname); CMyObject *p = new CMyObject(sLname); myArr.Add(p); p->sLname=sLname; pRs->MoveNext(); } } pRs->Close(); pConn->Close(); } catch (_com_error &e) { } ::CoUninitialize(); } ========================== Стек: USER32! bff558ba() KERNEL32! bff7363b() KERNEL32! bff942e7() QuickWatch: BFF558BA CXX0017:Error:symbol "BFF558BA" not found
|