我先提示一下,在你dll unload时应该将它还原。五秒中后贴码。

解决方案 »

  1.   

    dll工程文件
    library Watch;uses
      SysUtils,
      Classes,
      Windows,
      Forms,
      WatchFrm in 'source\WatchFrm.pas' {frmWatch};var
      DllApp : TApplication;{$R *.res}procedure MyDLLProc(Reason: Integer);
    begin
    //  在DLL退出时还原
      if Reason = DLL_PROCESS_DETACH then
      begin
        if Assigned(DllApp) then
        begin
          Application := DllApp;
        end;
      end;
    end;
    procedure WatchShow(App: TApplication); stdcall; export;
    begin
      if not Assigned(DllApp) then
      begin
        DllApp := Application;
        Application := App;
      end;  if not Assigned(frmWatch) then
        frmWatch := TfrmWatch.Create(Application);
      frmWatch.Show;end;//输出函数
    exports
      WatchShow;begin
      DllProc := @MyDllProc;
    end.
      

  2.   

    首先多谢 Nizvoo(瓦匠泥★恨不抗日死) 我是这样做的。这样当 FormStyle 是 fsNormal 时,很正常。
    但 fsMDIChild 时,却有 Bug兄台给我的代码,我几经调试,还是无法正常运行。连 Form 是 fsNormal 时都过不去。
    老是报 地址重复。是不是我的机器有问题?Win2000 Server d4,d5,d6,Visual Studion 6
    library prAbout;uses
      ShareMem,
      SysUtils,
      Classes,
      Windows,
      Forms,
      Dialogs,
      utAbout in 'utAbout.pas' {FMAbout};var
      DllApp : TApplication; {$R *.RES}
    procedure MyDLLProc(Reason: Integer);
    begin
    //  在DLL退出时还原
      if Reason = DLL_PROCESS_DETACH then
      begin
        if Assigned(DllApp) then
        begin
          Application := DllApp;
        end;
      end;
    end;procedure WatchShow(App: TApplication); stdcall;
    begin
      if not Assigned(DllApp) then
      begin
        DllApp := Application;
        Application := App;
      end;  if not Assigned(FMAbout) then
        FMAbout := TFMAbout.Create(Application);
      FMAbout.Show;
    end;procedure ShowAbout(AHandle: THandle); StdCall;
    begin
      Application.Handle := AHandle;  if FMAbout=nil then
        FMAbout := TFMAbout.Create(Application);
      FMAbout.ShowModal;
    end;exports ShowAbout;
    exports WatchShow;begin
      DllProc := @MyDllProc;
    end.
      

  3.   


    终于找到了解决方案,送分的同时,希望 Nizvoo(瓦匠泥★恨不抗日死) 能看到。再次感谢 Nizvoo(瓦匠泥★恨不抗日死) 的拔刀相助。http://vcl.vclxx.org/DELPHI/D32SAMPL/MDIDLL.ZIP