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!
搞了一天了,搞不定!!十万火急!!!高手们快来救我!!!

解决方案 »

  1.   

    问题解决!
    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恢复,那么在主程序退出时,会报内存访问错误!希望跟我有一样问题的人,能有帮助。
      

  2.   

    一般的都是在DLL初始化的时候把EXE中的Application, Screen
    两个对象替换DLL中的对应的对象, 在DLL释放的时候再还原.