文档章节

调用外部 DLL 中的函数(2. 晚绑定)

涂孟超
 涂孟超
发布于 2014/09/26 15:34
字数 219
阅读 4
收藏 0
点赞 0
评论 0
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  //晚绑定,也就是动态调用外部函数主要用以下三个命令:
  //LoadLibrary:获取 DLL
  //GetProcAddress:获取函数
  //FreeLibrary:释放

  //定义一个过程类型,参数要和需要的函数一致
  TMB = function(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    MB: TMB;  {声明函数 MB}
    inst: LongWord;  {声明一个变量来记录要使用的 DLL 句柄}
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  inst := LoadLibrary('user32.dll');
  if inst <> 0 then
    MB := GetProcAddress(inst, 'MessageBoxW');
//    MB := GetProcAddress(inst, 'MessageBoxA'); {Delphi 2009 之前的版本用这句}
end;

//调用测试:
procedure TForm1.Button1Click(Sender: TObject);
var
  t,b: PChar;
begin
  t := '标题';
  b := '内容';
  MB(0, b, t, 0);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeLibrary(inst);  {记得释放}
end;

end.

© 著作权归作者所有

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
在Visual Studio中用C++语言创建DLL动态链接库图文教程

什么是DLL(动态链接库)? DLL是一个包含可由多个程序同时使用的代码和数据的库。例如:在Windows操作系统中,Comdlg32 DLL执行与对话框有关的常见函数。因此,每个程序都可以使用该DLL中包...

徐学良 ⋅ 2015/12/31 ⋅ 0

悟透LoadRunner - 调用外部DLL的点点滴滴

引言 当我们使用VuGen时, 允许我们调用外部的DLL定义的函数。通过调用外部DLL中的函数,可以减少我们的脚本在整个运行期间内存消耗。同时,还有一个好处是可以对一些复杂的算 法进行复用,比...

zting科技 ⋅ 2017/01/11 ⋅ 0

VC中DLL的创建及调用方法

此中只有实际才操作,而无相关理论 ⊃2; DLL的创建 首先,用VC集成开发界面中的“新建”,新建一个项目。无论是VC6.0还是VC.NET,都有建立DLL项目的选项。只不过有些稍有不同,例如VC.NET中就...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

Python调用DLL库--ctypes

ctypes是Python的一个外部库,提供和C语言兼容的数据类型,可以很方便地调用C DLL中的函数。 ctypes的使用非常简明,如调用cdecl方式的DLL只需这样: from ctypes import *; h=CDLL('msvcrt...

匿名 ⋅ 2012/09/20 ⋅ 0

读取PE文件的导入表

    在上一篇文章里,我使用一个 TreeList 控件,展示了 PE 文件的内容。在那里可充分了解PE的文件头的信息,但是对 section(备注:常见译文为节,段,块)的一些信息我们还没有涉及。比...

hoodlum1980 ⋅ 2010/09/08 ⋅ 0

LoadRunner使用动态链接库技术

什么是动态库? 动态库一般又叫动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法...

长平狐 ⋅ 2013/03/12 ⋅ 0

在 C# 中通过 P/Invoke 调用Win32 DLL

,.NET Framework 1.0 或 1.1 版类库中存在任何 Windows 所没有的功能限制都不足为怪。毕竟,32 位的 Windows(不管何种版本)是一个成熟的操作系统,为广大客户服务了十多年。相比之下,.NE...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

delphi 动态加载dll

引入文件 DLL比较复杂时,可以为它的声明专门创建一个引入单元,这会使该DLL变得更加容易维护和查看。引入单元的格式如下:   unit MyDllImport; {Import unit for MyDll.dll }   inter...

geek_loser ⋅ 2014/08/06 ⋅ 0

PHP中global与$GLOBALS['']的区别

根据官方的解释是 $GLOBALS['var'] 是外部的全局变量$var本身。 global $var 是外部$var的同名引用或者指针。(错误:是个别名引用而已,非指针!!!) 举例说明一下: php纯技术探讨交流群...

速贷100 ⋅ 2017/03/08 ⋅ 0

JNA—JNI终结者

JNA—JNI终结者 介绍 给大家介绍一个最新的访问本机代码的Java框架—JNA。 JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架。...

i33 ⋅ 2012/03/14 ⋅ 5

没有更多内容

加载失败,请刷新页面

加载更多

下一页

sbt网络问题解决方案

http://dblab.xmu.edu.cn/blog/maven-network-problem/

狐狸老侠 ⋅ 2分钟前 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 45分钟前 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 51分钟前 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

Spring clound 组件

Spring Cloud技术应用从场景上可以分为两大类:润物无声类和独挑大梁类。 润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。 Ribbon,客户端负载均衡,特性有区域亲和、重试机制。...

英雄有梦没死就别停 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部