向DLL传递Application句柄以创建MDI子窗口的问题

在BCB中,建立一个DLL工程,DLL中会提供对外接口函数,函数中创建一个MDI的子窗体,在调用者的MDI父窗体中显示。

null

有两个问题:

一、直接调用,总是提示没有可用的MDI父窗口可供使用;后来明白,DLL中的默认Application和主程序中的Application是不同的变量,所以在DLL中使用Application->CreateForm( __classid(TForm), &Form );创建子窗体,是不对的。

这种情况下,需要将主窗体的Application传递个DLL。

详细分析请参考:《c++builder6运行时错误:cannot create form no mdi form are currently active

二、由第一个问题引入的第二个问题

为了在调用结束后,将Application变量修改回来,我在DllEntryPoint函数中进行判断时使用的是

if ( reason == DLL_PROCESS_DETACH || reason == DLL_THREAD_DETACH )
{
Application = gpDllApp;
}

这样,导致每次关闭子窗口,Application就会被复位一次。

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
if ( reason == DLL_PROCESS_DETACH )
{
Application = gCLDllApp;
}
return 1;
}

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容