|
|
su.dbms- SU.DBMS ---------------------------------------------------------------------- From : Wadim S. Dicke 2:5020/175.2 13 Nov 2001 13:25:45 To : All Subject : raw OLE DB -------------------------------------------------------------------------------- Goodluck to you All! Работаю я с сабжем, заметил маленькую утечку памяти, стал проверять... Выяснилось: везде, где нужно интерфейсы высвобождать, Release() написано, но не везде они реально высвобождаются. А именно, проблема нашлась вот где: /*********************** делаем все как нас учили ***********************/ IRowset* pRowset; IColumnsInfo* pColumnsInfo; DBCOLUMNINFO* pDBColumnInfo; OLECHAR* pStringsBuffer; HRESULT hr; hr = pRowset->QueryInterface(IID_IColumnsInfo, (void **) &pColumnsInfo); //все OK, hr == 0 hr = pColumnsInfo->GetColumnInfo(&lNumCols, &pDBColumnInfo, &pStringsBuffer); //все OK, hr == 0 hr = pColumnsInfo->Release(); //ooops! hr == 1 :o( /*********************** и обламываемся ***********************/ Соответственно, потом не освобождается и IAccessor. Самое забавное, что если GetColumnInfo(...) не делать, а сразу же, только запросив, попытаться высвободить IColumnsInfo, результат будет тем же. Кто из работавших с сабжем имеет предположения, что бы это могло значить? Прошу не утруждать себя ответами типа "брось эту гадость, перейди на что-нибудь другое". With a faint smile from beneath a mask, Serpent. --- ifmail v.2.15 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /su.dbms/3300fc39c676.html, оценка из 5, голосов 10
|