2013-08-22 1 views
0

Я набираю класс на C++. Вот мой код:Возможно ли использовать ADODB :: _ RecordsetPtr объект как данные элемента?

class MyClass 
{ 
private: 
    ADODB::_RecordsetPtr pConn; 
public: 
    MyClass(); 
}; 

MyClass::MyClass() 
{ 
    pConn = ADODB::_ConnectionPtr("ADODB.Connection"); 
    // ...... 
} 

Проблема заключается в том, когда я пытаюсь назначить временный ADODB::_ConnectionPtr объект pConn, компилятор генерирует исключение: Unhandled exception at at 0x75C9C41F in AccessReader.exe: Microsoft C++ exception: _com_error at memory location 0x003AF808.

Является ли это потому, что ADODB::_ConnectionPtr объект не копируемый?

Как исправить эту проблему?

Большое спасибо заранее.

+0

При использовании смарт-типа указатель оболочки, то вы * * должны обрабатывать исключения _com_error, что он производит, когда основной метод COM выходит из строя. Не делать этого просто создает загадочные необработанные исключения C++, которые не говорят вам, что пошло не так. –

ответ

1

В соответствии с вашим кодом вы устанавливаете _RecordsetPtr на номер _ConnectionPtr.

Вот другие вещи, чтобы проверить:

Вы называли CoInitialize или CoInitializeEx?

Попытка поймать исключение и посмотреть, что он жалуется:

catch (_com_error &e) { 
    std::cerr << e.Description() << std::endl 
}