在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. windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看

    windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看 1. 新建excel表格 A B C D E 姓 名 全名 登录名 密码 李 四 李四 李四 test123!@ ...

  2. AVRmega16 LED 例程

                                                                                      AVRmega16 LED 例程   ...

  3. Redis快速入门:初识Redis

    [IT168 专稿]在之前的文章中介绍了<Redis快速入门:选择Key-Value Store>,今天给大家介绍Redis的入门知识.Redis是一个开源的使用ANSI C语言编写.支持 ...

  4. springboot-数据库访问之jpa

    什么是springDate? springData的作用: 整体简化的架构: JPA :Java Persistence API 如果没有springData 我们需要去学每一种对应的jpa实现, 有 ...

  5. Centos最小化安装

    1.选择最小安装: 2.选择相应的安装包 老男孩提示: 1.根据经验,选择安装包时应该按最小化原则,即不需要的或者不确定是否需要的就不安装,这样可以最大程度上确保系统安全. 2.如果安装过程落了部分包 ...

  6. Spark学习摘记 —— RDD行动操作API归纳

    本文参考 参考<Spark快速大数据分析>动物书中的第三章"RDD编程",前一篇文章已经概述了转化操作相关的API,本文再介绍行动操作API 和转化操作API不同的是, ...

  7. OpenCV - Add Noise的一些方法

    噪声常用有两种:一种椒盐噪声,一种高斯噪声. import numpy as np def pepper_and_salt(src, proportion): """ : ...

  8. Rust 中的数据布局--可选的数据布局

    Rust 允许你指定不同于默认的数据布局策略,并为你提供了不安全代码指南. repr(C) 这是最重要的"repr".它的意图相当简单:做 C 所做的事.字段的顺序.大小和对齐方式 ...

  9. C语言break,return

    C语言break,continue,return的相似与区别 相同点: 都改变了程序的执行流程 区别是:break    用于循环和switch分支,跳出它所在分支或循环体到它所在的模块的      ...

  10. PHP截取字符串(指定开始和结束的字符串)