Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка при вызове COM / 8 сообщений из 8, страница 1 из 1
22.05.2006, 13:36
    #33742567
Homosum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при вызове COM
Уже писал на этот счет, но так и не получил ответа, но вот появились новые факты.
Пишу я на Visual C++ .Net, проекты MFC.

Я работаю через дерективу #import, с "умными указателями" на классы в объектах COM. Создавал свои объекты, пытался с ними работать и получал при выходе из программы такую ошибку:
Код: plaintext
1.
2.
3.
4.
5.
void _Release() throw()
    {
        if (m_pInterface != NULL) {
            m_pInterface->Release();
        }
    }

Думал, может это у меня такие кривые объекты com, ведь когда работал с Excel тоже через import, то все было просто превосходно.

Но вот стал работать с MSXML, так выходит такая же ошибка! В чем дело? Почему это происходит??? Указатели я сам не удаляю, они у меня объявлены в членах класса. Как только происходит удаление этого класса (диалог), сразу программа вылетает в выше указанный код.

Пожалуйста, помогите!!!
...
Рейтинг: 0 / 0
22.05.2006, 15:09
    #33742818
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при вызове COM
но при работе с умными указателями не надо вызывать релиз.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
22.05.2006, 15:14
    #33742838
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при вызове COM
HomosumУже писал на этот счет, но так и не получил ответа, но вот появились новые факты.
Пишу я на Visual C++ .Net, проекты MFC.

Я работаю через дерективу #import, с "умными указателями" на классы в объектах COM. Создавал свои объекты, пытался с ними работать и получал при выходе из программы такую ошибку:
Код: plaintext
1.
2.
3.
4.
5.
void _Release() throw()
    {
        if (m_pInterface != NULL) {
            m_pInterface->Release();
        }
    }

Думал, может это у меня такие кривые объекты com, ведь когда работал с Excel тоже через import, то все было просто превосходно.

Но вот стал работать с MSXML, так выходит такая же ошибка! В чем дело? Почему это происходит??? Указатели я сам не удаляю, они у меня объявлены в членах класса. Как только происходит удаление этого класса (диалог), сразу программа вылетает в выше указанный код.

Пожалуйста, помогите!!!
Была у меня такая же фигня с ADO... Вылечилась банально: надо было в коде прописать уничтожение созданных объектов.
Например, такой код (не смог найти оригинал, поэтому приведу лишь схему):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#import ...... //Импортируем "описание" ADO
....
CoInitialize(NULL); //
_RecordsetPtr pRs; //Создаем указатель на Recordset
pRs->Open(....); //Открываем 
.....
pRs->Close();//Закрываем
......
pRs.Release();//"Удаляем" указтель. Лечит от ошибки, приведенной в вопросе.
CoUnitialize();
...
Рейтинг: 0 / 0
22.05.2006, 15:15
    #33742839
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при вызове COM
Станислав C. HomosumУже писал на этот счет, но так и не получил ответа, но вот появились новые факты.
Пишу я на Visual C++ .Net, проекты MFC.

Я работаю через дерективу #import, с "умными указателями" на классы в объектах COM. Создавал свои объекты, пытался с ними работать и получал при выходе из программы такую ошибку:
Код: plaintext
1.
2.
3.
4.
5.
void _Release() throw()
    {
        if (m_pInterface != NULL) {
            m_pInterface->Release();
        }
    }

Думал, может это у меня такие кривые объекты com, ведь когда работал с Excel тоже через import, то все было просто превосходно.

Но вот стал работать с MSXML, так выходит такая же ошибка! В чем дело? Почему это происходит??? Указатели я сам не удаляю, они у меня объявлены в членах класса. Как только происходит удаление этого класса (диалог), сразу программа вылетает в выше указанный код.

Пожалуйста, помогите!!!
Была у меня такая же фигня с ADO... Вылечилась банально: надо было в коде прописать уничтожение созданных объектов.
Например, такой код (не смог найти оригинал, поэтому приведу лишь схему):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#import ...... //Импортируем "описание" ADO
....
CoInitialize(NULL); //
_RecordsetPtr pRs; //Создаем указатель на Recordset
pRs->Open(....); //Открываем 
.....
pRs->Close();//Закрываем
......
pRs.Release();//"Удаляем" указтель. Лечит от ошибки, приведенной в вопросе.
CoUnitialize();

Sorry, я работаю в VS 6.0
...
Рейтинг: 0 / 0
22.05.2006, 16:35
    #33743138
Homosum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при вызове COM
maXmoно при работе с умными указателями не надо вызывать релиз.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm

Так я и не вызываю Relese. У меня дебаггер туда прыгает!
...
Рейтинг: 0 / 0
22.05.2006, 16:45
    #33743180
Homosum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при вызове COM
Вроде решил проблему, но думаю, не будет ли проблем в дальнейшем???

Я убрал ::CoUninitialize(); и меня описанная ошибка перестала вызываться!!!
Я так понял, что удаляться умные указатели должны именно до ::CoUninitialize();
Но тогда возникает резонный вопрос. А нужно ли вообще вызываеть эту функцию? Если да, то такие последствия могут быть от ее не вызова.

Где же мне ее тогда вызывать???
...
Рейтинг: 0 / 0
22.05.2006, 16:53
    #33743214
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при вызове COM
CoUninitialize

Работа с COM

читайте доки...
...
Рейтинг: 0 / 0
22.05.2006, 17:17
    #33743301
Homosum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при вызове COM
Dmitrii K. CoUninitialize

Работа с COM

читайте доки...

Я создал деструктор для класса CTestXMLApp, т.е. для класса приложения и вызвал там CoUninitialize. Так можно?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка при вызове COM / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]