在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,注意资源使用的顺序  载入->调用->释放.

Delphi 类库(DLL)动态调用与静态调用示例讲解的更多相关文章

  1. jQuery扩展两类函数(对象调用,静态调用)

    作者:zccst 先看小例子: $(function(){ //扩展方式1-通过对新调用 $.fn.each1=function(){ console.log("hehehehe$.fn.f ...

  2. [转]JSP页面的动态包含和静态包含示例及介绍

    原文地址:http://www.jb51.net/article/53659.htm 一.静态包含 本文介绍JSP静态包含语句,即使用JSP的include指令来完成的包含操作.JSP中,有两种包含其 ...

  3. Android与JNI(一) ---- Java调用C 静态调用

    第一.通过eclipse新建一个工程名为HelloJni的android工程,并编译. 第二.右键工程-->Android Tools --> Add Native Support,出现如 ...

  4. Delphi DLL的创建、静态及动态调用

    转载:http://blog.csdn.net/welcome000yy/article/details/7905463 结合这篇博客:http://www.cnblogs.com/xumenger/ ...

  5. C++调用DLL有两种方法——静态调用和动态调用

    C++调用DLL有两种方法——静态调用和动态调用 标签: dllc++winapinullc 2011-09-09 09:49 11609人阅读 评论(0) 收藏 举报  分类: cpp(30)  [ ...

  6. 【VB技巧】VB静态调用与动态调用dll详解

    本文“[VB技巧]VB静态调用与动态调用dll详解”,来自:Nuclear'Atk 网络安全研究中心,本文地址:http://lcx.cc/?i=489,转载请注明作者及出处! [[请注意]]:在以下 ...

  7. dll静态调用和动态调用

    动态链接库有2种连接方式,一种是通过库直接加入(又叫隐式加载或载入时加载),一种是在运行时加入.后者很好理解,比如LoadLibrary(),GetProcAddress()获取想要引入的函数,使用完 ...

  8. Delphi下DLL编程知识(转)

    一.  DLL和系统变量     在 System 单元声明的变量中,有几个对DLL编程有特殊影响.IsLibrary 可以检测代码是执行在应用程序中还是执行在DLL中,在应用程序中 IsLibrar ...

  9. Delphi 动态与静态调用DLL(最好的资料)

    摘要:本文阐述了 Windows 环境下动态链接库的概念和特点,对静态调用和动态调用两种调用方式作出了比较,并给出了 Delphi 中应用动态链接库的实例. 一.动态链接库的概念    动态链接库(  ...

随机推荐

  1. SQL注入工具sqlmap的使用

    sqlmap使用 测试注入点 sqlmap -u "URL" 爆数据库 sqlmap -u "URL" --dbs 查看当前库 sqlmap -u " ...

  2. CF1452E Two Editorials (思维题,暴力+差分)

    题目描述: 给你m个位于[1,n]的区间p,现在有长度为K的区间b和c.设对于区间$p[i]$,定义$a[i]$为$p[i]$分别与b,c相交长度的较大值,现在问区间b和c位于何处时,$\sum p_ ...

  3. Prometheus+alertmanager告警配置-2

    prometheus 告警 prometheus 通过alertmanager进行告警 实现监控告警的步骤: 在prometheus中定义告警规则rule_files alertmanager配置告警 ...

  4. [Lua游戏AI开发指南] 笔记零 - 框架搭建

    一.图书详情 <Lua游戏AI开发指南>,原作名: Learning Game AI Programming with Lua. 豆瓣:https://book.douban.com/su ...

  5. 说说对 SQL 语句优化有哪些方法?(选择几条)

    1.Where 子句中:where 表之间的连接必须写在其他 Where 条件之前,那些可 以过滤掉最大数量记录的条件必须写在 Where 子句的末尾.HAVING 最后. 2.用 EXISTS 替代 ...

  6. requests库获取响应流进行转发

    遇到了一个问题,使用requests进行转发 requests响应流的时候,出现各种问题,问题的描述没有记录,不过Debug以下终于解决了问题.......下面简单的描述解决方案 response = ...

  7. java 中有几种方法可以实现一个线程?

    继承 Thread 类 实现 Runnable 接口 实现 Callable 接口,需要实现的是 call() 方法

  8. 名词解析-RPC

    什么是RPC RPC 的全称是 Remote Procedure Call 是一种进程间通信方式.它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程 ...

  9. 5. Git初始化及仓库创建和操作

    4. Git初始化及仓库创建和操作 基本信息设置 1. 设置用户名 git config --global user.name 'itcastphpgit1' 2. 设置用户名邮箱 git confi ...

  10. jq easyui数据网络的分页过程

    第一次写技术方面的文章,有点忐忑,总怕自己讲的不对误导别人.但是万事总有个开头,有不足错误之处,请各位读者老爷指出. 言归正传,最近刚进新公司,上头要求我先熟悉熟悉easyui这个组件库.在涉及到da ...