我自己写了一个DLL,里面放了一个窗口,但是我不知道如何在其他程序中调用这个窗口。

解决方案 »

  1.   

    例如:
    function showform:boolean;
    var
      form:Tform;
    begin
     try
      result:=true;
      form:=Tform.Create(application);
      form.show;
     finally
      result:=false;
     end;
    end;再输出函数showform
      

  2.   

    函数showform是写在DLL中的吧?
      

  3.   

    对不起,我按你的方法写了,可是有错误,说是“无法定位程序输入点SHOWFORM于动态连接库上”。不知什么原因,如果可能你可不可以给我一个这样的小例子,我刚开始学习写库。
    直接写在帖子上也行,发到我的信箱也行[email protected]!
    拜托,谢谢啦!
      

  4.   

    procedure showform; stdcall;
    begin
     try
      Form1:=TForm1.Create(application);
      Form1.showmodal;
     finally
      FreeAndnIl(Form1);
     end;
    end;在library中Exports showform;
      

  5.   

    呵呵,如楼上的要加调用约定的“stdcall”
      

  6.   


    library IcbsCardUse;uses
      SysUtils,
      Classes,
      Windows,
      Forms,
      ComObj,
      UTLoginToMain in 'UTLoginToMain.pas',
      UCardUse in 'UCardUse.pas' {FrmCardUse},
      dateselect in 'dateselect.pas' {frmDateSelect},
      UInPassword in 'UInPassword.pas' {FrmInPassword},
      UTCommCard in 'UTCommCard.pas',
      ULand in 'ULand.pas' {FrmLand},
      UTRegReadwrite in 'UTRegReadwrite.pas';{$R *.res}//利用传入的信息连接数据库并显示窗口
    procedure CardUse(LinkDB: TLoginToMain);stdcall;
    begin
        Application.Handle:=LinkDB.AppHandle;
        FrmCardUse:=TFrmCardUse.Create(Application);    //建立窗口
        frmDateSelect:=TfrmDateSelect.Create(Application);
        FrmInPassword:=TFrmInPassword.Create(Application);
        FrmLand:=TFrmLand.Create(Application);
        try
            with FrmLand do
            begin
                LoginToMain := TLoginToMain.Create;     //建立存储登陆结果类
                LoginToMain:=LinkDB;                //传递参数
                ShowModal;
            end;
        finally
            FrmLand.Free;
            frmDateSelect.Free;
            FrmInPassword.Free;
            FrmCardUse.Free;
        end;
    end;exports
        CardUse name 'CardUse';begin
    end.调用的时候这样子:
    在你的全局出要声明一下:
    procedure CardUse(LinkDB: TLoginToMain);stdcall;
    external 'IcbsCardUse.Dll' name 'CardUse';然后调用的时候就可以向函数一样的用了。
    注意:动态库最好不要封装窗体,而且一旦用完最好释放掉。这是我很早些的代码,在Delphi6下可以通过。你试试。
      

  7.   

    该结贴了。如果还不清楚,你去看《Delphi5 开发人员指南》中的DLL那一章,讲解的非常清楚了