Delphi动态链接库DLL创建和使用
1、打开Delphi7集成开发环境,File-New-Other 在弹出的对话框在New页签选择DLL Wizard点击OK
2、在生成的Project2,填写如下代码:
function MyDllFunc(x:integer):integer;stdcall;
begin
Result := x*x;
end;
exports
MyDllFunc ;
导出函数
3、这样在工程文件目录就多了一个Project2.dll
4、调用DLL有两种方式,一静态调用,二动态调用,先演示静态调用,静态调用在程序启动时就调用。
打开Delphi7集成开发环境,在默认工程的Form1窗体,放置两个Edit控件和一个Button控件,并设置Button1的Caption属性为调用。
5、在Unit1.pas的implementation下进行声明要调用的DLL
implementation
{$R *.dfm}
function MyDllFunc(x:integer):integer;stdcall;
external 'Project2.dll'
注意这里的Project2.dll的路径和默认工程的Project1必须在同个文件夹。
6、双击调用按钮,进入OnClick事件方法,写如下代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := inttostr(MyDllFunc(strToint(Edit1.Text)));
end;
F9运行程序,在Edit1输入3,点击调用按钮,Edit2的内容变为9,DLL调用成功
7、下面演示动态调用,将Unit1.pas文件代码,改成如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
TmyDiaoYong = function (x:integer):Integer; stdcall;
procedure TForm1.Button1Click(Sender: TObject);
var
hDll:Thandle;
pFnc:TFarProc;
myDiaoYong:TmyDiaoYong;
begin
hDll:=Loadlibrary('Project2.dll') ;
pFnc := GetProcAddress(hDll,'MyDllFunc');
myDiaoYong:=TmyDiaoYong(pFnc);
Edit2.Text := inttostr(myDiaoYong(strToint(Edit1.Text)));
FreeLibrary(hDLL);
end;
end.
解释一下:
这里边主要定义了一个类型 TmyDiaoYong = function (x:integer):Integer; stdcall; 这个类型参数和返回值必须和要调用的DLL中的函数一致。调用过程分成三步,一加载DLL文件,二取得DLL文件函数地址,三实例化本地函数调用函数
8、F9运行程序,在Edit1输入4,点击调用按钮,Edit2的内容变为16,DLL动态调用成功