Ошибка при использовании CComQIPtr...
От: cobold  
Дата: 04.03.03 08:31
Оценка:
Мне нужно использовать активх компонент в диалоге. Вот реализация(содранная по образу и подобию с WTLNavigator):






CComQIPtr<_DPdf> pdf;
IUnknown *m_pUnk;
...
LRESULT CMainDlg::OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{

    CWindow w= GetDlgItem(IDC_PDFCTRL2);
    AtlAxGetControl(w, &m_pUnk);
    pdf= m_pUnk;
    pdf->LoadFile(L"C:\\Program Files\\Adobe\\Acrobat 5.0\\Help\\ENU\\ACROBAT.PDF");

    return 0;
}

LRESULT CMainDlg::OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
    m_pUnk->Release();
    EndDialog(wID);
    return 0;
}


это работает , до тех пор , пока не вызывается деструктор pdf, при выходе из программы.
Проблема, в том, что исчезает v_table.
Вопрос: чего не хватает в коде, для корректного завершения программы?
Re: Ошибка при использовании CComQIPtr...
От: Ivan Россия www.rsdn.ru
Дата: 04.03.03 09:12
Оценка:
Здравствуйте, cobold, Вы писали:

C>это работает , до тех пор , пока не вызывается деструктор pdf, при выходе из программы.

C>Проблема, в том, что исчезает v_table.
C>Вопрос: чего не хватает в коде, для корректного завершения программы?

Наверное, у тебя деструктор CComQIPtr вызывается после вызова CoUninitialize
Либо освобождай CComQIPtr явно перед выходом с помощью
  pdf.Release();

либо откажись от использования глобальной переменной
Re[2]: Ошибка при использовании CComQIPtr...
От: cobold  
Дата: 04.03.03 10:15
Оценка:
Здравствуйте, Ivan, Вы писали:

I>Здравствуйте, cobold, Вы писали:


C>>это работает , до тех пор , пока не вызывается деструктор pdf, при выходе из программы.

C>>Проблема, в том, что исчезает v_table.
C>>Вопрос: чего не хватает в коде, для корректного завершения программы?

I>Наверное, у тебя деструктор CComQIPtr вызывается после вызова CoUninitialize

I>Либо освобождай CComQIPtr явно перед выходом с помощью
I>
I>  pdf.Release();
I>

I>либо откажись от использования глобальной переменной

pdf.Release() помогло, спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.