dll本身Export的函数,可以打开Form,这样就可以了。
但是如果要从dll中获得FORM对象,然后打开,似乎有点难度。

解决方案 »

  1.   

    DLL中的函数如下:
    function aaaaa(aaa):xxxxx;
    var
      Form1:TForm1;
    begin
      Form1 := TForm1.Create(Application) ;
      Form1.ShowModal;
    end;
      

  2.   

    编译提示Application无法识别的标识,编译不通过啊?有没有实际成功过的例子呢?
      

  3.   

    那就不用Application试试。用self或者什么别的。
      

  4.   

    //DLL工程文件
    library Project1;
    uses
      SysUtils,
      Classes,
      Unit1 in 'Unit1.pas' {Form1};
    exports
     aaa;
    end.
    //窗体单元文件
    unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;
    type
      TForm1 = class(TForm)
        Edit1: TEdit;
    procedure aaa(ahandle:handle);
    implementation
    {$R *.DFM}
    procedure aaa(ahandle:handle);
    var
      form1:tform1;
    begin
      Application.handle:=ahandle;
      form1:=tform1.create(application);
      form1.showmodal;
    end;
    end.
    如果还有问题我一头载下去!
      

  5.   

    在DLL程序中定义exports showDLLWindow,function showDLLWindow :LongInt的实现:
    var
     DllForm :Tfrm1;
    begin
      Application.Handle := AHandle;
      DLLForm := Tfrm1.Create(Application);
      Result := Longint(DLLForm);
      DLLForm.Caption := ACaption;
      DLLForm.ShowModal;
    end调用程序中:
    function showCutPaperWindow(AHandle: THandle; ACaption: String): 
    Longint;stdcall;external 'aaaa.DLL';var
      fform:TForm;
    .......
    ...
    ....
      if not Assigned(FFormRef) then
        FFormRef := TForm(showDLLWindow(Application.Handle, Caption));
    DLL窗体的释放应在DLL中用Release.
      

  6.   

    把这个过程声明放在TYPE上面procedure aaa(ahandle:handle);export;TYPE。
    另外你一开始少了一个BEGIN
      

  7.   

    library MyDll;
    uses
      SysUtils,
      Classes,
      Forms,
      Windows,
      UnDllColor in 'UnDllColor.pas' {FrmColor};{$R *.RES}
    Procedure ShowColor(AHandle:THandle;ACaption:string);stdcall;
    var
      FrmColor:TFrmColor;
    begin
      Application.handle:=AHandle;
      try
        FrmColor:=TFrmColor.Create(Application);
        FrmColor.Caption:=ACaption ;
        FrmColor.showmodal;
      finally
        FrmColor.Free;
      end;
    end;exports
      ShowColor;
    begin
    end.
      

  8.   

    谢谢各位的帮助,还是把代码发给我吧,我这里运行时打不开窗口,我也没办法了,一定给
    分回报大家:[email protected]
      

  9.   

    almeidar:
        程序发出,你试试!应该是可以的
        win2000+delphi6
      

  10.   

    sorry!
    上次忘了贴附件!现在发出了!400k左右!
      

  11.   

    后续的问题,在DLL中的FORM里放入ActiveX控件,为何就无法运行该窗口,甚至编译不通过?
      

  12.   

    好,我有空再试试!
    [email protected]也行!