Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с COM и MFC Dialog-based Application, Самопроизвольно закрывается окно 
:(
    Опции темы
some2k7
Дата 12.2.2009, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.4.2008

Репутация: нет
Всего: нет



Уважаемый Олл!

В Visual C++ знаний крайне немного, начал разбираться и столкнулся с проблемой, причину которой не могу понять.

В MFC Dialog-based Application создаю подключение к COM-серверу.
Все замечательно, все работает, события генерит, данные отдает.

Есть потребность сделать так, чтобы по нажатию на одну кнопку - приложение отключалось от COM-сервера и тут-же подключалось обратно.

Подключаюсь вот так:
Код

EnableAutomation();    
m_StServer = NULL;

HRESULT hr = m_StServer.CreateInstance(CLSID_StServer);
if (hr != S_OK)
    AfxMessageBox("CreateInstance FAILED!");

m_dwCookie = 0;
BOOL Ret = AfxConnectionAdvise( 
        m_StServer,
        DIID__IStClient, 
        this->GetIDispatch(FALSE),
        FALSE, //donod addref
        &m_dwCookie );


Переподключаться пытаюсь вот так:
Код

m_dwCookie = 0;
BOOL Ret = AfxConnectionUnadvise( 
           m_StServer,
           DIID__IStClient, 
           this->GetIDispatch(FALSE),
           FALSE, //donod addref
           m_dwCookie);

HRESULT hr = m_StServer.CreateInstance(CLSID_StServer);
if (hr != S_OK)
    AfxMessageBox("CreateInstance FAILED!");
    
m_dwCookie = 0;
Ret = AfxConnectionAdvise( 
           m_StServer,
           DIID__IStClient, 
           this->GetIDispatch(FALSE),
           FALSE, //donod addref
           &m_dwCookie );


При нажатии на кнопку - окно закрывается без каких-либо ошибок.

Я понимаю, что где-то я явно идиот.
Но не могу никак понять, где.
Подскажите пож.


PM MAIL   Вверх
voov
Дата 12.2.2009, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



эээ, а ты на какую кнопку то нажимал? случайно не на ОК или САНСЕЛ? 

дай полный код обработчика нажатия этой кнопки.
PM MAIL   Вверх
some2k7
Дата 12.2.2009, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.4.2008

Репутация: нет
Всего: нет



В обработчике - только код переподключения.

Код

void CTestDialogDlg::OnBnClickedButton5()
{
..... код переподключения из первого сообщения ...
}


Это последние строчки в TestDialogDlg.cpp
PM MAIL   Вверх
voov
Дата 12.2.2009, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



значит ставь брекпоинт на первой строчке этого обработчика (F9) и пройди пошагово, увидишь на какой строчке вылетает, да и заходит ли сюда вообще.
PM MAIL   Вверх
some2k7
Дата 12.2.2009, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.4.2008

Репутация: нет
Всего: нет



Ок, мысль здравая, спасибо. Попробую и отпишусь.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0455 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.