我已经将DLL的Application保存起来,并在结束时返回给它,
在调用中将主窗口的Application传了进来,并赋给了DLL的Application。

解决方案 »

  1.   

    兄弟们,快来帮忙UP啊,UP有分啊!我要上班了。
      

  2.   

    你把问题说清楚嘛,是不是调用方法不对?我公司作的erp系统用的也是这种方式,没什么不对呀,
    把你调用有关代码发过来看看~~~~~~~~~~
      

  3.   

    天啊!为什么没人回答啊?不在DLL中子窗口可以列出来的!
      

  4.   

    library MK_Stock;uses
      Windows,
      SysUtils,
      Classes,
      PubData,
      Forms,
      Parent in '\\HZOW\SOFT2\HINGE\PARENTS\PARENT.pas' {FParent},
      FormParent in '\\HZOW\SOFT2\HINGE\PARENTS\FORMPARENT.pas' {FFormParent},
      MK_MJRK in 'MK_MJRK.pas' {FMK_MJRK};var
      DllApp : TApplication;
      pConfig: ST_CONFIG;
      pShareData: ST_SHAREDATA;
    {$R *.RES}procedure MyDLLProc(Reason: Integer);
    begin
      { DLL is unloading. Restore the Application pointer. }
      if Reason = DLL_PROCESS_DETACH then//退出时
      begin
         if Assigned(DllApp) then
            Application := DllApp;
      end;
    end;procedure MK_MJRK(const Config: ST_CONFIG; const ShareData: ST_SHAREDATA);stdcall;export;
    var
      Child : TFMK_MJRK;//一个功能子窗口
    begin
      Child := nil;
      pConfig := Config;
      pShareData := ShareData;
      if not Assigned(DllApp) then
      begin
         DllApp := Application;
         Application := pShareData.MainApp;
      end;
      try
        Child := TFMK_MJRK.Create(Application.MainForm);
        Child.Show();
      except
        Child.Free();
      end;
    end;exports
      MK_MJRK;begin
      DLLProc := @MyDLLProc;
    end.
      

  5.   

    TO:散发弄舟,扣舷独笑
    你能将你们的框架发给我看一下吗?先谢了!
    Mail:[email protected]
      

  6.   

      try
        Child := TFMK_MJRK.Create(Application.MainForm);
        Child.Show();
      except
        Child.Free();
      end;
    中的...TFMK_MJRK.Create(Application.MainForm);这句是否有问题,目前的Application是谁呢,你单步跟踪一下,是在哪一句报错,错误信息是什么?
      

  7.   

    Application 已经是主窗口的Application,我用参数传进来的!
    在调用过程中是没有任何错误的,子窗口了显示正常,
    不好意思!Windos菜单中也是列出了子窗口的名字,
    但是当子窗口只剩下DLL中的子窗口时,水平地排列,垂直排列等菜单
    已经变灰不能用了。如果一有其它不在DLL的子窗口出现,这些菜单就
    又可以用了。
      

  8.   

    也就是说在语法上可以排除错误,可能是逻辑上有问题了,
    我以前的系统是除了一个主窗体,所有子窗口都由dll调用,
    你这种混用的情况,我也没经验,
    如果找不出问题何在你是不是可以用强制的方法不要菜单灰显(if enable=false then ...true),如果不行,那一定有冲突~~~~~~~gz,帮你up
      

  9.   

    你单步跟踪一下,是在哪一句报错,错误信息是什么? 
    要不你发过文件来我帮你调试([email protected])
      

  10.   

    退出报错?
    你单步跟踪一下,是在哪一句报错,错误信息是什么? 
    要不你发过文件来我帮你调试([email protected])
      

  11.   

    主程序和dll编译时都使用runtime packages,这样就行了,没有必要传Application。
    相信我,没错的。
      

  12.   

    TO:hellion(恶人) 
      这样是没有报错,但是水平,垂直排列还是不能用。
      

  13.   

    我怎么可以呀
    procedure TMainForm.muiCascadeClick(Sender: TObject);
    begin
      Cascade;
    end;procedure TMainForm.muiHorTileClick(Sender: TObject);
    begin
      TileMode := tbHorizontal;
      Tile;
    end;procedure TMainForm.muiVerTileClick(Sender: TObject);
    begin
      TileMode := tbVertical;
      Tile;
    end;
      

  14.   

    to:Nizvoo(瓦匠泥) 
      没有解决!
      

  15.   

    To:(恶人)
      我用的是ActionList中的标准Action,用你的方法准实可以,
    但为什么runtime packages不钩上就会出错呢?
      

  16.   

    to:liang_z(千山一刀之忍者神龟)
    没收到,若问题仍没解决再发[email protected]试试hellion(恶人)所说的我也有经历。两者都要带包编绎。
      

  17.   

    to liang_z:
    我的理解是:delphi的全局变量定义在bpl中,使用runtime packages后exe与dll共享bpl映射到一个地址空间的变量。
    希望各位指正。
      

  18.   

    不好意思,没搞定.
    试试全用dll的form行不行
      

  19.   

    我试过了,现在它都不会变灰了,在不写代码,Windwos的标准Action还是用不来
      

  20.   

    只要把DLL中的子FROM一连进来,
    WINDOS的标准Action就再也不会灰掉了。