在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. 大咖说|网易数帆论道 PolarDB 数据库开源 & 存储生态

    开源技术如何商业化?将遇到什么问题?有哪些可行的解决办法?本期大咖说,阿里云数据库开源战役负责人曲山将携手网易副总裁汪源与你分享关于开源商业化的思考. 嘉宾简介 网易副总裁.杭州研究院执行院长.网易数 ...

  2. 什么是root帐户?

    root帐户就像一个系统管理员帐户,允许你完全控制系统.你可以在此处创建和维护用户帐户,为每个帐户分配不同的权限.每次安装Linux时都是默认帐户.

  3. Vue中data数据,使用v-model属性绑定第三方插件(例如Jquery的日期插件)无法自动更新

    问题原因就是html结合Vue使用,但是项目又使用了第三方日期控件,这会导致日期值选择形式的更新后,而Vue管理的对应v-model字段并未自动更新,这是因为日期控件未触发Input事件,需要我们在值 ...

  4. Mybatis 是如何进行分页的?分页插件的原理是什么?

    Mybatis 使用 RowBounds 对象进行分页,它是针对 ResultSet 结果集执行的内 存分页,而非物理分页.可以在 sql 内直接书写带有物理分页的参数来完成物理分 页功能,也可以使用 ...

  5. char型变量中能不能存贮一个中文汉字?为什么?

    char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦.不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么 ...

  6. 什么是线程池(thread pool)?

    在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内 存资源或者其它更多资源.在 Java 中更是如此,虚拟机将试图跟踪每一个对象, 以便能够在对象销毁后进行垃圾回收.所以提高服务程 ...

  7. MariaDB CAST语法

    Syntax CAST(expr AS type) Description CAST()函数采用一种类型的值,并产生另一种类型的值,类似于CONVERT函数. CAST()和CONVERT()之间的主 ...

  8. python学习笔记(六)——异常处理

    异常处理 在 Python 中,通过两个重要的功能来处理程序在运行中出现的异常和错误.其一是本文提到的异常处理,其二是断言(Assertions). python中,所有的异常均派生自 BaseExc ...

  9. DOS、DOS攻击、DDOS攻击、DRDOS攻击

    https://baike.baidu.com/item/dos%E6%94%BB%E5%87%BB/3792374?fr=aladdin DOS:中文名称是拒绝服务,一切能引起DOS行为的攻击都被称 ...

  10. HTML5+CSS3兼容收藏夹

    CSS3选择器兼容IE6~8: Selectivizr 使用方法: <!--[if (gte IE 6)&(lte IE 8)]> <script src="htt ...