一定要复制应用程序的句柄给DLL的TApplication对象

解决方案 »

  1.   

    Application.Handle不是么?DLL中——
    Application.Handle:=AHandle;{AHandle时传进DLL的Application.Handle}
      try
        Application.CreateForm(TTmpForm, TmpForm);
        TmpForm.ShowModal;
        if OpenDialog.Excute then
          ......
        end;  finally
        //Application.Handle:=0;{这里到底该怎么做?}
        TmpForm.Destroy;
      end;
      

  2.   

    根据你的那段代码,OpenDialog要在关闭 TmpForm 之后才会出现。
      

  3.   

    哦,错了。OpenDialog应该在TmpForm的一个按钮的OnClick事件里的
    因为程序改乱了,所以一时糊涂,写错了!希望继续交流!
      

  4.   

    看看这个。我的是DLL窗体MDI方式的,希望能帮你一下。
    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.
      

  5.   

    能给具体讲讲么?
    DLL_PROCESS_DETACH 是什么东西?
    Assigned()什么意思?为什么可以用作判断条件??谢谢先!
      

  6.   

    原汁原味的Use Assigned to determine whether the pointer or procedure referenced by P is nil. P must be a variable reference of a pointer or procedural type. Assigned(P) corresponds to the test P<> nil for a pointer variable, and @P <> nil for a procedural variable.Assigned returns False if P is nil, True otherwise.
      

  7.   

    dll_process_detach是告诉你的dll,现在是进行卸载操作,是dll出入口函数的参数。
    具体参阅相关书籍dll的部分,very easy
    不过我有个问题,哪位大峡用d6实现过dll的出入口函数,好象根本不起作用
      

  8.   

    To : Nizvoo我按照你的方法使了好几遍,也查了一些有关dll的书或帮助文件等,但最终结果是:Application传进去了,窗口显示的问题解决了,
    然而当我关闭DLL窗口时,什么都不见了,我用任务管理器查看,进程非但没有结束,反而增加使用内存约2M。我的编译环境是 Win2k ADS + Service pack 2
    Delphi 6.0 + service pack 1请释疑,谢谢!