Мне нужно использовать активх компонент в диалоге. Вот реализация(содранная по образу и подобию с 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.
Вопрос: чего не хватает в коде, для корректного завершения программы?
Здравствуйте, cobold, Вы писали:
C>это работает , до тех пор , пока не вызывается деструктор pdf, при выходе из программы.
C>Проблема, в том, что исчезает v_table.
C>Вопрос: чего не хватает в коде, для корректного завершения программы?
Наверное, у тебя деструктор CComQIPtr вызывается после вызова CoUninitialize
Либо освобождай CComQIPtr явно перед выходом с помощью
pdf.Release();
либо откажись от использования глобальной переменной
Здравствуйте, Ivan, Вы писали:
I>Здравствуйте, cobold, Вы писали:
C>>это работает , до тех пор , пока не вызывается деструктор pdf, при выходе из программы.
C>>Проблема, в том, что исчезает v_table.
C>>Вопрос: чего не хватает в коде, для корректного завершения программы?
I>Наверное, у тебя деструктор CComQIPtr вызывается после вызова CoUninitialize
I>Либо освобождай CComQIPtr явно перед выходом с помощью
I>I> pdf.Release();
I>
I>либо откажись от использования глобальной переменной
pdf.Release() помогло, спасибо.