, но не понимаю, как возвернуть и получить ( для дальнейших действий ) _Recordset?
ПОМОГИТЕ, плиз, я уже устал воевать с этим. Я только начал изучать C++ и стопорица на чем-то не очень хочеца, так как ступор отбивает желание вообще изучать, а ведь интересно
F>HRESULT Dialog::GetRecordset( CString sql, _Recordset ** res )
F>{
F> if ( pConnect != NULL )
F> {
F> try
F> {
F> _CommandPtr pCommand;
F> pCommand.CreateInstance( __uuidof( Command ) );
pCommand->CreateInstance( __uuidof( Command ) );
F> pCommand->ActiveConnection = pConnect;
F> pCommand->CommandText = ( _bstr_t ) sql;
F> _RecordsetPtr pRecordset;
F> pRecordset.CreateInstance( __uuidof( Recordset ) );
pRecordset->CreateInstance( __uuidof( Recordset ) );
F> pRecordset->CursorLocation = adUseClient;
F> pRecordset->Open( ( IDispatch * ) pCommand, vtMissing, adOpenStatic, adLockBatchOptimistic, adCmdUnknown );
F> *res = ( _Recordset * ) pRecordset;
Зачем такое приведение типов, или _RecordsetPtr != _Recordset *?
Вообще чрезмерное использование (type) кастов если они не нужны, и особенно в С++, может привести к ошибкам. Лучше приучаться использовать *_cast'ы, а то так не нароком можно и int к IDispatch привести :)
F> }
F> catch ( _com_error &e )
F> {
F> // err
F> }
F> }
F> return S_OK;
F>}
F>
F>, но не понимаю, как возвернуть и получить ( для дальнейших действий ) _Recordset?
Странно, что ты хочешь? Вроде почти рабочий код. res — изменяется, в нём и возвращается твой _Recordset. Хотя говорить о возвращениее _Recordset немного не корректно, скорее возвращается указатель на объект класса _Recordset. F>ПОМОГИТЕ, плиз, я уже устал воевать с этим. Я только начал изучать C++ и стопорица на чем-то не очень хочеца, так как ступор отбивает желание вообще изучать, а ведь интересно
_Recordset (или _RecordsetPtr) recordset;
Ну так и вызывай GetRecordset("bla-bla-bla", &recordset);
PS. ИМХО заменять _Recordset * на _RecordsetPtr не вполне удобно, это всё из Паскаля чтоли пришло. Хотя если у нас какие-то smart-pointera юзаются то это конечно удобнее чем smart_ptr<_Recordset> везде писать.
PPS. На сколько я знаю имена начинающиеся с _ зарезервированы за производителем компилятора, и вполне может случиться конфуз, так-что если все эти _Recordset — твои типы, лучше их переименовать, а ещё можно в отдельный namespace выделить (но тут такого наверное не надо)
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Mechanicus, Вы писали:
M>>Эээ, ты это на каком языке написал? WH>На С++. Это враперы для ADO сгенерирование директивой #import
Тогда я умываю руки
Вроде разобрался. путаница была из-за моего глубокого непонимания типов. Как сказала одна моя хорошая знакомая ( программистка ) те, кто когда-то ушел от языков, где типы являются важными очень долго потом учаца снова "общаться" с типами.
Спасибо всем большое. Еще вопросов туева хуча будет — точно:)