比如将DLL中的主窗体Create在主程序中的某个TWinControl中
那位大虾贴个代码,先谢过了

解决方案 »

  1.   

    Library ShowFrmdll;
    uses
      ...
      Unit1 in 'Unit1.pas' {Form1};var
      DLLApp: TApplication;function ShowDllForm(App:TApplication; ACaption:String):Longint;stdcall;
    begin
      
      Application := App;  if not Assigned(Form1) then
        Form1:=TForm1.Create(Application);
      Result:=Longint(Form1);
      Form1.Caption := ACaption;
      Form1.Show;
    end;procedure DLLUnloadProc(Reason : Integer);
    begin
      if Reason = DLL_PROCESS_DETACH then Application := DLLApp;//恢复
    end;exports
      ShowDllForm;begin
      DLLApp := Application; //保存 DLL 中初始的 Application 对象
      DLLProc := @DLLUnloadProc;     //保证 DLL 卸载时恢复原来的 Application
    end.要注意的是,创建的窗体被释放后再卸载 DLLhttp://expert.csdn.net/Expert/topic/1974/1974304.xml?temp=.9995996http://expert.csdn.net/Expert/topic/1962/1962766.xml?temp=.2309839
      

  2.   

    dll的procedure  将主程序TWinControl的handle传过来最后在close的时候释放掉窗体
    procedure ShowForm(AHandle: THandle);
    begin
      with form1 do
      begin
        if Not Assigned(Form1) then
          Form1 := TForm1.Create(Application);
        Form1.ParentWindow := AHandle;
        Form1.show;
      end;
    end;
      

  3.   

    qixin000(小齐) ,你把调用dll中sdi的程序给copy过来了,可惜不是搂主要得
      

  4.   

    用 ljmanage(过客)  的方法实现了
    也谢谢 小齐 和  ZyxIp(绝望中...) 
    先给分
     ZyxIp(绝望中...) 给我发到 [email protected]