显示DLL中的非模态对话框

目前碰到的问题是需要显示某个DLL中的对话框,并且让它附着在EXE中的对话框窗体上。

在网上搜到一份显示模态对话框的代码,稍作改动保存下来。简单地列一下dll和exe中的

相关代码。

dll中

extern "C" __declspec(dllexport) void ShowModelessDialogByHandle(DWORD dwPointer) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); if (pChildWnd == NULL) { pChildWnd = new CTest(); pChildWnd->Create(IDD_DIALOG1, CWnd::FromHandle((HWND)dwPointer)); //pChildWnd->SetWindowPos(NULL, 10, 10, 40, 20, SWP_SHOWWINDOW); pChildWnd->ShowWindow(SW_SHOW); }else { if (IsWindow(pChildWnd->GetSafeHwnd())) { pChildWnd->ShowWindow(SW_SHOW); }else { pChildWnd = new CTest(); pChildWnd->Create(IDD_DIALOG1, CWnd::FromHandle((HWND)dwPointer)); //pChildWnd->SetWindowPos(NULL, 10, 10, 40, 20, SWP_SHOWWINDOW); pChildWnd->ShowWindow(SW_SHOW); } } }

exe中

if (hmod != NULL) { DWORD dwWnd = (DWORD)this->GetSafeHwnd(); //typedef void (WINAPI * TESTDLL)(DWORD dwPointer); typedef void (__cdecl * TESTDLL)(DWORD dwPointer); TESTDLL lpproc; lpproc = (TESTDLL)GetProcAddress (hmod,"ShowModelessDialogByHandle"); if(lpproc!=(TESTDLL)NULL) (*lpproc)(dwWnd); }

 

中途碰到一个栈溢出的问题:执行中出现了一个异常!!

The value of ESP was not properly saved across a function call

解决方法是吧winapi替换成__cdecl就可以了。

下面附上上面2个区别。

http://www.cnblogs.com/sober/archive/2009/09/01/1558178.html

 

 

你可能感兴趣的:(Windows编程)