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

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

【全新正版】C语言从入门到精通c语言程序设计c++电脑编程入门零基础自学轻松学计算机c语言入门软件程序员开发教程教材书籍
全新版【赠:电子书实战案例+VC6.0安装包】 | 月销量2259件
优惠价28.8元
原价¥98

淘口令:

¥XRWiXKxZqO8¥
 

有两个问题:

一、直接调用,总是提示没有可用的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
喜欢就支持一下吧,技术咨询可以联系QQ407933975
点赞0
分享
评论 抢沙发
CPPKU的头像-cppku-C++库

昵称

取消
昵称表情代码图片