D
ddev
Unregistered / Unconfirmed
GUEST, unregistred user!
MDI 应用,一个子窗体,是作为容器用的,加载的内容同样是一个窗体,
不过是在 DLL 中。基本过程如下:
1、子窗体调用入口(D5E):
function ShowDllForm(hParentWnd: HWND, ...): HWND;
stdcall;
{
DllForm = TDllForm.CreateParented(hParentWnd);
Result := DllForm.Handle;
...
}
2、主调用(BCB5E)
在子窗体 OnShow 及 OnResize 中同时处理,
其中 hDllWnd 为调用窗体(DLL窗体)的句柄:
HWND __fastcall XXXMDI::ShowDllForm(void)
{
HMODULE hDllModule = theApp->hDllModule;
HWND hWnd = NULL;
if (FAttachProject != NULL &&
hDllModule != NULL)
{
typedef HWND (DLL_PROC)(HWND, const char*, int);
DLL_PROC* lpDllProc = (DLL_PROC*)GetProcAddress(hDllModule, "ShowDllForm");
if (lpDllProc != NULL)
hWnd = (*lpDllProc)(Handle, AFileName.c_str(), dwFlag);
}
}
return hWnd;
}
void __fastcall XXXMDI::OnFormResize(...)
{
//如果 DLL 窗体没有加载,则加载
if (hDllWnd == NULL)
hDllWnd = ShowDllForm();
//调整窗体大小
if (hDllWnd != NULL)
SetWindowPos(hDllWnd, HWND_TOP,
0, 0, ClientWidth, ClientHeight,
SWP_SHOWWINDOW);
}
问题说明:在加载及程序本身运行过程全部正常,在退出程序时,
如果先把 XXXMDI 子窗体关闭,然后再关闭主窗体,也正常,但
如果先不关闭该子窗体而直接关闭程序,则出错,看 CPU 调试,
出现调试地址的内容全部为 ??? 。要说明的是,出错肯定是在该
载有 DLL 的窗体上,其他过程全部正常。
急死了,请教各位大侠帮帮我分析一下错误原因吧...
不过是在 DLL 中。基本过程如下:
1、子窗体调用入口(D5E):
function ShowDllForm(hParentWnd: HWND, ...): HWND;
stdcall;
{
DllForm = TDllForm.CreateParented(hParentWnd);
Result := DllForm.Handle;
...
}
2、主调用(BCB5E)
在子窗体 OnShow 及 OnResize 中同时处理,
其中 hDllWnd 为调用窗体(DLL窗体)的句柄:
HWND __fastcall XXXMDI::ShowDllForm(void)
{
HMODULE hDllModule = theApp->hDllModule;
HWND hWnd = NULL;
if (FAttachProject != NULL &&
hDllModule != NULL)
{
typedef HWND (DLL_PROC)(HWND, const char*, int);
DLL_PROC* lpDllProc = (DLL_PROC*)GetProcAddress(hDllModule, "ShowDllForm");
if (lpDllProc != NULL)
hWnd = (*lpDllProc)(Handle, AFileName.c_str(), dwFlag);
}
}
return hWnd;
}
void __fastcall XXXMDI::OnFormResize(...)
{
//如果 DLL 窗体没有加载,则加载
if (hDllWnd == NULL)
hDllWnd = ShowDllForm();
//调整窗体大小
if (hDllWnd != NULL)
SetWindowPos(hDllWnd, HWND_TOP,
0, 0, ClientWidth, ClientHeight,
SWP_SHOWWINDOW);
}
问题说明:在加载及程序本身运行过程全部正常,在退出程序时,
如果先把 XXXMDI 子窗体关闭,然后再关闭主窗体,也正常,但
如果先不关闭该子窗体而直接关闭程序,则出错,看 CPU 调试,
出现调试地址的内容全部为 ??? 。要说明的是,出错肯定是在该
载有 DLL 的窗体上,其他过程全部正常。
急死了,请教各位大侠帮帮我分析一下错误原因吧...