• Delphi生成即调用带窗体的Dll


    library frmDll;
    
    { Important note about DLL memory management: ShareMem must be the
      first unit in your library's USES clause AND your project's (select
      Project-View Source) USES clause if your DLL exports any procedures or
      functions that pass strings as parameters or function results. This
      applies to all strings passed to and from your DLL--even those that
      are nested in records and classes. ShareMem is the interface unit to
      the BORLNDMM.DLL shared memory manager, which must be deployed along
      with your DLL. To avoid using BORLNDMM.DLL, pass string information
      using PChar or ShortString parameters. }
    
    uses
      SysUtils,
      Classes,
      Forms,
      FormDll in 'FormDll.pas' {Form1};
    
    {$R *.res}
    
    function GetDllForm:TForm;stdcall;export;//定义导出方法;
    begin
      result:=Form1; //函数返回类型为一个窗体;
    end;
    exports
      GetDllForm;//声明可导出的方法;
    
    begin
    end.
    
    
    
    
    unit FormDll;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        btn1: TButton;
        procedure btn1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.btn1Click(Sender: TObject);
    begin
      MessageDlg('你已经成功调用了Dll控件',mtinformation,[mbOK],0);
    end;
    
    initialization //在单元中放在文件结尾前,包含用来初始化单元的代码,它在主程序运行前运行并且只运行一次
    begin
      Form1:=TForm1.Create(Application);
    end;
    
    finalization//在单元中放在 initialization 和 end. 之间,包含了单元退出时的代码。程序退出时运行并且只运行一次。
    begin
      Form1.Free;
    end;
    
    end.
    
    
    
    
    
    unit testdll;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        btn1: TButton;
        procedure btn1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
      //function GetDllForm:TForm;
    
    implementation
    
    {$R *.dfm}
    function GetDllForm:TForm;external 'frmDll.dll';  //声明从函数frmDll.dll中调用函数
    
    
    procedure TForm1.btn1Click(Sender: TObject);
    var
      AForm:TForm;
    begin
      AForm:=GetDllForm;
      AForm.Show;
    end;
    
    end.
     
    书搞进脑袋 创新 创造; 积极
  • 相关阅读:
    JAVA并发之ReentrantLock源码(一)
    java并发之线程池
    Quine--输出程序源码的程序(java)
    【leetcode】Weekly Contest 92
    【java集合类】ArrayList和LinkedList源码分析(jdk1.8)
    【leetcode】Weekly Contest 91
    牛客2018.6模拟考编程题
    MFC 完全自定义控件
    图形学中求平面方程系数以及法向量
    std::function解决函数重载绑定
  • 原文地址:https://www.cnblogs.com/tobetterlife/p/12169918.html
Copyright © 2020-2023  润新知