创建简单的带窗体的Dll(Delphi7.0):
File>>New>>other>>Dll Wizard,新建Dll工程,File>>New>>Form在Dll工程中添加Form窗体。另存工程为frmDll.dpr和FormDll.pas。
先给出代码:
frmDll.dpr代码:
library frmDll;
uses
SysUtils,
Classes,
Forms,
FormDll in 'FormDll.pas' {Form1};
{$R *.res}
function GetDllForm:TForm;stdcall;export;//定义导出方法;
begin
result:=frmDll; //函数返回类型为一个窗体;
end;
exports
GetDllForm;//声明可导出的方法;
begin
end.
/
FormDll.pas代码:
unit FormDll;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
MessageDlg('你已经成功调用了Dll控件',mtinformation,[mbOK],0);
end;
initialization //在单元中放在文件结尾前,包含用来初始化单元的代码,它在主程序运行前运行并且只运行一次
begin
Form1:=TForm1.Create(Application);
end;
finalization//在单元中放在 initialization 和 end. 之间,包含了单元退出时的代码。程序退出时运行并且只运行一次。
begin
Form1.Free;
end;
end.
///
编译好dll后新建工程application,在工程中调用dll;
工程代码如下:
unit testdll;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(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.Button1Click(Sender: TObject);
var
AForm:TForm;
begin
AForm:=GetDllForm;
AForm.Show;
end;
end.