так вот: Recordset не создается !!! Проверено на SP4, SP5
аналогичное создание с использованием других средств — классов, сгенеренных из АДОшной DLL, создание по имени "ADODB.Recordset" работает без проблем. Может кто-нибудь сталкивался и знает решение проблемы ?
VD>У тебя неправильные ID используются и скорее вего устаревшие хеадеры. Скачай последний PSDK или используй #import.
PSDK у меня стоит последнее...впрочем от версии PSDK это вряд ли зависит, потому что во всех его версиях CLSID/IID Recorset'а имееют одно и то же значение.
То, что приведенный тобой код работает, я и так знаю — я ж говорю, что все возможные способы создание я проверил. Особенность в том что после выхода из функции, где этот код написан, Recordset грохнется (или я неправ ?), а мне нужно его вернуть по указателю. Альтернативное решение провлемы в использовании сгенеренных визардом классов для ADO и присвоении Recordset.m_bAutoRelease = FALSE до возврата из функции, но тогда получается, что туча кода уже написана под использование хидеров adoint.h и adoid.h и только для этой мульки нужно генерить классы.
Здравствуйте Archie, Вы писали:
A>PSDK у меня стоит последнее...впрочем от версии PSDK это вряд ли зависит
То что идет с VC6 никуда не годится... из PSDK врде правильные.
A>...Особенность в том что после выхода из функции, где этот код написан, Recordset грохнется (или я неправ ?), а мне нужно его вернуть по указателю.
Recordset — COM-объект. Если AddRef не делать (по правилам COM-а), то грохнется, а если сделать, то должен нормально работать. Покрайней мере у нас есть функия:
Здравствуйте VladD2, Вы писали:
VD>Recordset — COM-объект. Если AddRef не делать (по правилам COM-а), то грохнется, а если сделать, то должен нормально работать.
Спасибо! Я просто ошибочно считал что CComPtr<> не обращая внимания на счетчмк ссылок уничтожит объект в деструкторе.
VD>PS
VD>А что в разных версиях ADO изменяются CLSID?
В том-то и дело что они не изменяются — я это писал в предыдущем сообщении. Это один из базовых принципов COM. Только не понятно одно — почему так трудно было засунуть в VC корректные их значения...значение, получаемое CLSIDFromString(L"ADODB.Recordset", &clsid) отличается от CLSID_CADORecordset
А насчет OLESTR — писать дольше Вот вместо _T писать TEXT я себя еще заставляю, но это...
VD>>PS
VD>>А что в разных версиях ADO изменяются CLSID?
A>В том-то и дело что они не изменяются — я это писал в предыдущем сообщении. Это один из базовых принципов COM. Только не понятно одно — почему так трудно было засунуть в VC корректные их значения...значение, получаемое CLSIDFromString(L"ADODB.Recordset", &clsid) отличается от CLSID_CADORecordset
У нас все работает, только хеадеры не из VC6, а из PSDK.
A>А насчет OLESTR — писать дольше
Так сделай дефайн.
A>Вот вместо _T писать TEXT я себя еще заставляю, но это...
А зачем?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте VladD2, Вы писали:
VD>Здравствуйте Archie, Вы писали:
A>>>>А насчет OLESTR — писать дольше
A>>дефайн на дефайн ? глумно это...
VD>Ну, тогда посмотри реализацию _T
да знаю я как она релизована — я ж и говорю глумно это.
A>>>>Вот вместо _T писать TEXT я себя еще заставляю, но это...
VD>>>А зачем?
A>>так нагляднее
VD>Особо нагладно становится когда их штук пять в одно строке.
да, тут рассуждать и спорить можно до бесконечности — и что _T определен в tchar а TEXT в winnt, и что еще Страуструп рекомендовал использовать идентификаторы напрямую без дефайнов дабы не запутывать код...и каждый будет прав по-своему. У буржиуев на такие вопросы вообще ответ стандартный — "it's not my style"