Delphi 类库(DLL)动态调用与静态调用示例讲解
发布时间:2020-12-15 09:59:06 所属栏目:大数据 来源:网络整理
导读:??????? 在Delphi或者其它程序中我们经常需要调用别人写好的DLL类库,下面直接上示例代码演示如何进行动态和静态的调用方法: { **********************************************************}{ }{ DLL动态调用与静态调用的例子 }{ 编译环境 Delphi XE }{ 转载
??????? 在Delphi或者其它程序中我们经常需要调用别人写好的DLL类库,下面直接上示例代码演示如何进行动态和静态的调用方法: { **********************************************************} { } { DLL动态调用与静态调用的例子 } { 编译环境 Delphi XE } { 转载或编译请不要修改此文件 } { ******************************************************* ***} { ******************************************************* ***} { Designed by Jason 2013-08-30 } { ******************************************************* ***} program LoadDll; {$APPTYPE CONSOLE} uses SysUtils,windows; type TGetCPUID = function(CPUID: PAnsiChar): integer; stdcall; //注1 function GetCPUID(CPUID: PAnsiChar): integer; stdcall;external 'CPUID_Util.dll'; var dllHandle: THandle; GetId: TGetCPUID; Id: Array [0 .. 255] of Ansichar; //注2: DELPHI XE中使用Unicode编码字符串 这里使用ansichar begin try //注3: 静态调用 WriteLn('先尝试静态调用'); GetCPUID(Id); WriteLn(Id); if (Trim(Id) <> '') then WriteLn('静态调用成功,回车尝试动态调用') else begin WriteLn('静态调用失败,回车后开始动态调用'); end; ReadLn; //注4: 动态调用 dllHandle := LoadLibrary(pchar('CPUID_Util.dll')); if (dllHandle > 32) then begin WriteLn('成功载入动态库,回车后开始调用函数'); ReadLn; GetId := GetProcAddress(dllHandle,pchar('GetCPUID')); GetId(Id); FreeLibrary(dllHandle); WriteLn(Id); ReadLn; end else begin WriteLn('动态库载入失败'); end; except on E: Exception do WriteLn(E.ClassName,': ',E.Message); end; end. ?????? 静态调用为常规方法,静态调用要点:掌握被调函数的函数名,参数数量和参数类型; ????? 动态调用不要求程序载入时同时载入动态库,调用模式为按需调用,比较灵活,但操作技巧稍高,主要时使用了三个系统API函数(LoadLibrary,GetProcAddress,FreeLibrary) LoadLibrary载入动态库并取得句柄--->GetProcAddress取得函数入口点--->FreeLibrary释放资源 ???????动态调用要点:1,先定义一个函数见“注1”;2,注意传入参数的类型,避免调用失败;3,注意资源使用的顺序? 载入->调用->释放. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |