在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
暂无评论内容