mdi主窗口在EXE中,创建在dll中的mdi子窗口,报Cannot create form. no MDI forms are currently active!
为何??我在Exe中创建mdi子窗口即正常。我已经把application做为参数传给dll了。
dll的代码如下:
function Entry(hdl: THandle): TForm; stdcall;
begin
Application.Handle := hdl;
Result := TfrmDllMgr.Create(Application);
frmOptMgr := TfrmDllMgr(Result);
end;
dll的form的属性是fsNormal
EXE的form属性是fsMDIForm
不知道为什么会报no MDI forms are currently active!
搞了一天了,搞不定!!十万火急!!!高手们快来救我!!!
为何??我在Exe中创建mdi子窗口即正常。我已经把application做为参数传给dll了。
dll的代码如下:
function Entry(hdl: THandle): TForm; stdcall;
begin
Application.Handle := hdl;
Result := TfrmDllMgr.Create(Application);
frmOptMgr := TfrmDllMgr(Result);
end;
dll的form的属性是fsNormal
EXE的form属性是fsMDIForm
不知道为什么会报no MDI forms are currently active!
搞了一天了,搞不定!!十万火急!!!高手们快来救我!!!
function Entry(hdl: THandle): TForm; stdcall;
begin
Application.Handle := hdl;
Result := TfrmDllMgr.Create(Application.MainForm); //注意这行.
frmOptMgr := TfrmDllMgr(Result);
end;在dll初始化的地方加入:
var
DLLApp : TApplication;procedure DLLUnloadProc(Reason : Integer); register;
begin
if (Reason = DLL_PROCESS_DETACH) or (Reason = DLL_THREAD_DETACH) then
Application := DLLApp;
end;exports
Entry;begin
DLLApp :=Application; //±£Áôpplication
DLLProc := @DLLUnloadProc; //½«ÖØдºóµÄÈë¿Úº¯ÊýµØÖ·¸¶¸øDLLProc
end.如果没有把dll的application恢复,那么在主程序退出时,会报内存访问错误!希望跟我有一样问题的人,能有帮助。
两个对象替换DLL中的对应的对象, 在DLL释放的时候再还原.