Delphi函数指针,用于加载DLL


本文整理自网络,侵删。

 

要点:

1.DLL用exports加函数名表示导出这个函数

2.Assigned函数判断参数释放为nil,也就是是否存在

3.LoadLibrary用来加载一个DLL文件,参数为完整路径(同一目录下,可只写DLL文件名)。使用完了,要记得用FreeLibrary关闭这个打开的句柄

4.GetProcAddress判断dll中,是否存在某个导出的函数,返回值是这个函数的句柄。

5.type PMyFunc = procedure (para : Integer); 表示定义了一个名字叫PMyFunc的过程,只有1个Integer型参数

TianPan.dll文件源码如下:

library TianPan;

uses

  System.SysUtils, System.Classes;

{$R *.res}

procedure MyADDFunc(TemNo : Integer);

begin

  Writeln(TemNo*2);

end;

exports

MyADDFunc;

begin

end.



 

 

program MyPoint;  //指针详解

{$APPTYPE CONSOLE}

uses

  SysUtils,windows,Generics.Collections ;

 

{函数指针,用于加载DLL}

procedure MyFunc6();

 

type PMyFunc = procedure (para : Integer);//函数原型

var

  MyFunc : PMyFunc;//定义函数指针

  MyHandle : HMODULE;//定义dll句柄

begin

  MyHandle := LoadLibrary('TianPan.dll');

  if  MyHandle > 0  then   //如果dll存在

  begin

   MyFunc := GetProcAddress(MyHandle, 'MyADDFunc');//获取地址

    if Assigned(MyFunc) then //dll中函数存在

      MyFunc(2)       //调用函数

    else

    Writeln('DLL中的MyADDFunc函数不存在!');

  end else

  Writeln('DLL不存在!');

  FreeLibrary(MyHandle); //释放句柄

end;

 

{main主函数}

begin

 MyFunc6();

 Readln;//回车退出

end.

 

https://www.cnblogs.com/GodPan/p/3390117.html

相关阅读 >>

Delphi在richedit控件中插入gif动画表情

Delphi控制摄像头

Delphi d10.x 在android 9及更高版本下使用Delphi获取设备序列号?

Delphi 精炼的数字转换人民币大写转换代码

Delphi xe7 判断android应用程序中的通信状态类型

Delphi调用android振动功能

Delphi 任务栏显示进度条 createcomobject(clsid_taskbarlist) as itaskbarlist4

Delphi源码一个对字符加密解密的实例

Delphi enumwindows回调函数获取qq2009窗体句柄

Delphi 学习 sql 语句 - insert、update、delete

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...