DLL中有多个窗体,在主窗体调用DLL中的form1窗体后,form1需要调用DLL中的Form2窗体并且需从Form1中传递参给form2,需要怎样做?(主窗体动态调用DLL中的Form1已没问题)

解决方案 »

  1.   

    Application程序中怎么做Dll里面就怎么做。
      

  2.   

    调用模式窗体的时候记得把AHandle := Application.Handle传到DLL中去,并付值Application.Handle := AHandle;
      

  3.   

    参考<Delphi5开发人员指南>第九章 
    调用一个和多个是一样的
      

  4.   

    谢谢各位,在主窗体调用Dll中的form时有传递AHandle := Application.Handle
    主窗体调用DLL中的form1后(主窗体是不直接调用form2的),在form1中再调用form2时如果同Application中的窗体调用方法时会出现内存错误,form1中的变量好像无法给form2使用呀??
      

  5.   

    楼上我还是有些不明白,是否DLL中fom1调用form2也要传递Application.Handle呢?是否可简单举个例子,还望指导,谢谢!
      

  6.   

    不用,可以直接在FORM1的代码里调用
    procedure Tform1.doClick(Sender:TObject);
    begin   with Tform2.create(self) do
       try
         showmodal;
       finally
         free;
       end;
    end
      

  7.   

    在dll中封装窗口和其他vcl组件会生产许多内存访问问题,建议改用bpl代替dll
      

  8.   

    试一下 var OpenForm( var app :TApplication ) 
    begin 
       application := app ; 
       // create from  
    //   show from  
    end; 
      

  9.   

    同类问题,借宝地一用:
      
       问题: 我要用嵌套的汇编指令调用外部dll,dll中的接口被声明为stdcall类型.在CALL之前怎么传递接口参数,同时怎么返回函数结果.原型如下:
    function myRundll32(dll:string;fName:string;
      Params: array of const): DWord;
    const
      RecSize = SizeOf(TVarRec); // 循环处理参数列表时递增的字节数
    {参数说明:
        dll    : dll文件的完整路径
        fName  : 接口函数的名称,如:Execute
        params : 为参数列表
    }
    var
      PFunc: Pointer;
      ParCount: DWord;
      AHandle :THandle;
    begin
      AHandle:=LoadLibrary(pchar(xdll));
      if AHandle=0
      then Exit;
       //vdll:= Tdll(GetProcAddress(vHandle, pchar(xfun)));
      PFunc := GetProcAddress(AHandle,pchar(AName));
      if not Assigned(PFunc) then
        raise Exception.CreateFmt('找不到 %s 的 Method: %s', [xdll,
          AName]);end;
      

  10.   

    在DLL中尽量不要用全局变量一般是没有什么问题的,从动态库中也可以调用主程序中的FROM的