Здравствуйте, Ionov, Вы писали:
I>Ресурс диалога в самой DLL и обработчик тоже там.
I>Попробовал как ты посоветовал (двумя) способами — не помогло!
I>Прошелся под отладчиком в функцию CDialog::DoModal() и в ней выполняется код:
I>I>// disable parent (before creating dialog)
I>HWND hWndParent = PreModal();
I>AfxUnhookWindowCreate();
I>BOOL bEnableParent = FALSE;
I>if (hWndParent && hWndParent != ::GetDesktopWindow() && ::IsWindowEnabled(hWndParent))
I>{
I> ::EnableWindow(hWndParent, FALSE);
I> bEnableParent = TRUE;
I>}
I>
На этот код не обращай внимания. Это все правильно. Глупый МФЦ не использует DialogBox и DialogBoxParam для своих модальных диалогов, а эмулируют модальность вот так вот через одно место. Еще раз просмотрел твою функцию, вроде все нормуль. Попробуй не заморачиваться с ResourceHandle , потому как AFX_MANAGE_STATE именно для этого и придумали и оно все сделает как надо. Саму функцию перепиши примерно так:
__declspec( dllexport ) int ShowConfigDialog(const HWND pWndParent)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CConfigDlg dlg(); // Возможно лучше будет dlg(AfxGetMainWnd()), но не обязательно. Попробуй и так и так;
int iRes = dlg.DoModal();
return iRes;
}
А так не знаю даже в чем может быть дело. В InitInstance вызывается CWinApp::InitInstance? DLL обычная или MFC Extention (хотя если есть AFX_MANAGE_STATE, то скорее всего обычная, и это правильно). А до OnInitDialog() диалога управление доходит?