Delphi动态链接库DLL创建和使用

2025-10-22 01:10:51

1、打开Delphi7集成开发环境,File-New-Other 在弹出的对话框在New页签选择DLL Wizard点击OK

Delphi动态链接库DLL创建和使用

Delphi动态链接库DLL创建和使用

Delphi动态链接库DLL创建和使用

2、在生成的Project2,填写如下代码:

function MyDllFunc(x:integer):integer;stdcall;

begin

  Result := x*x;

end;

exports

  MyDllFunc ;

导出函数

Delphi动态链接库DLL创建和使用

3、这样在工程文件目录就多了一个Project2.dll

Delphi动态链接库DLL创建和使用

4、调用DLL有两种方式,一静态调用,二动态调用,先演示静态调用,静态调用在程序启动时就调用。

打开Delphi7集成开发环境,在默认工程的Form1窗体,放置两个Edit控件和一个Button控件,并设置Button1的Caption属性为调用。

Delphi动态链接库DLL创建和使用

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调用成功

Delphi动态链接库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动态调用成功

Delphi动态链接库DLL创建和使用

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢