文档章节

调用外部 DLL 中的函数(1. 早绑定)

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

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

//MB 函数的声明:
function MB(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;

implementation

{$R *.dfm}
{调用外部 DLL 中的函数,譬如调用系统 user32.dll 中的 MessageBoxA}
//function MB(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer;
//  stdcall; external user32 name 'MessageBoxA';

{其中 user32 是 Delphi 定义的常量 'user32.dll',可以直接写成:}
//function MB(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer;
//  stdcall; external 'user32.dll' name 'MessageBoxA';

{name 后面说明函数的真实名字}
{external 子句说明单元载入时就加载函数,也就是早绑定;如果晚绑定需要用 LoadLibrary}
{stdcall 指令表示参数传递是从右到左(Pascal则反之),不通过CPU寄存器传递}

{4个参数的数据类型可以使用对应的 Delphi 数据类型,譬如:}
//function MB(hWnd: LongWord; lpText, lpCaption: PChar; uType: LongWord): Integer;
//  stdcall; external 'user32.dll' name 'MessageBoxA';

{或者是:}
//function MB(hWnd: Cardinal; lpText, lpCaption: PChar; uType: Cardinal): Integer;
//  stdcall; external 'user32.dll' name 'MessageBoxA';

{如果函数在此单元声明后,需要给其他单元调用,需要先在 interface 区声明:}
//function MB(hWnd: Cardinal; lpText, lpCaption: PChar; uType: Cardinal): Integer;
//  stdcall;
{本例已经这样做了,如果要测试其他几种情况,需要先注释掉它}
{然后在 implementation 区,说明函数的来源:}
function MB; external 'user32.dll' name 'MessageBoxA';

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

end.

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2007/12/06/985900.html

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

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

徐学良
2015/12/31
96
0
悟透LoadRunner - 调用外部DLL的点点滴滴

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

zting科技
2017/01/11
0
0
LoadRunner使用动态链接库技术

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

长平狐
2013/03/12
60
0
读取PE文件的导入表

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

hoodlum1980
2010/09/08
0
0
在 C# 中通过 P/Invoke 调用Win32 DLL

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

晨曦之光
2012/03/09
167
0
Python调用DLL库--ctypes

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

匿名
2012/09/20
2.7K
0
Qt库版本改变引发的问题

情景一: 使用VS2010(对应VS2010版本Qt-4.8.6库)打开VS2008(对应VS2008版本Qt-4.8.6库)建立的工程,配置好相关参数后顺利通过编译并生成可执行文件。在运行时崩溃,提示“Unhandled exc...

qt_plus
2016/05/19
130
0
PHP中global与$GLOBALS['']的区别

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

速贷100
2017/03/08
0
0
Oracle空间查询 ORA-28595

可使用数据库管理系统 (DBMS) 的结构化查询语言 (SQL)、数据类型和表格式来处理地理数据库或安装了 ST_Geometry 类型的数据库中所存储的信息。 例如,在ArcMap中我们使用"相交"工具进行空间操...

gisweis
2017/04/24
0
0
linux c/c++面试知识点整理(三)

21、类成员函数的重载、覆盖和隐藏的区别 重载即为函数重载,重载的特征: (1)相同的范围,也就是在同一个类中; (2)函数名字相同; (3)参数不同; (4)virtual关键字无影响; demo如下: 覆盖...

晟夏的叶
2017/04/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

tomcat 学习笔记之 Session管理

1、Catalina 通过一个 Session 管理器的组件来管理建立的Session 对象 该组件由 org.apache.catalina.Manager 接口表示 Session 管理器必须与一个 Context 关联 Session 管理器负责,创建、更...

职业搬砖20年
9分钟前
0
0
jquery获取input框的几种方式

//如何用jquery获取<input id="test" name="test" type="text"/>中输入的值?$(" #test ").val()$(" input[ name='test' ] ").val()$(" input[ type='text' ] ").val()$(" input[ ......

gulf
12分钟前
0
0
gradle的环境变量的配置

gradle的环境变量的配置 1.首先下载jdk,并且配置jdk的环境变量. 2.找到自己AS安装gradle的目录 我自己的目录为:F:\Android Studio3.1.3\gradle\gradle-4.4 创建环境变量:GRADLE_PATH: F:\A...

android-key
18分钟前
0
0
saltstack配置apache

1.相关配置 #vim /etc/salt/master //打开如下内容的注释 file_roots: base: - /srv/salt #mkdir /srv/salt #vim /srv/salt/top.sls base: 'slaver.test.com': - apache 注意:若换成 '*',则......

硅谷课堂
19分钟前
0
0
Nested enum types are implicitly static

.Nested enum types are implicitly static So there's no need to declare them static explicitly....

Yixin_Nemo
19分钟前
0
0
xlsxwriter 常用excel格式

官方文档:xlsxwriter 官方文档 微博只对常用的方法做了总结和coding,详细方法请参考官方文档 常规写入数据: 写入字符串write_string() import xlsxwriterworkbook = xlsxwriter.Workb...

白木日勿
19分钟前
0
0
TeX

Ito LaTeX是一类用于编辑和排版的软件,用于生成PDF文档。 LaTeX编辑和排版的核心思想在于,通过\section和\paragraph等语句,规定了每一句话在文章中所从属的层次,从而极大方便了对各个层次...

E-C-Ares
22分钟前
0
0
nodejs调用webservice接口

刚接触花了一天时间去查找资料,网上资料也是够了,很多都试了不行,最后看了还是那么简单 主要是了node-soap node-soap-ntlm soap-ntlm-2,这几个试了都有缺陷, 1 首先安装soap npm instal...

lovelan1314
23分钟前
0
0
SUSE Linux 将被 EQT 收购

SUSE再次易主 Micro Focus 宣布将其一大部分业务出售给瑞典私人股本集团殷拓(EQT),所得的一部分收益将用来减轻债务,其余部分将返给股东。EQT 是一家专注于开发领域的投资公司,在软件行业拥...

linux-tao
31分钟前
1
0
Elastic-Job定时任务

用Elastic-Job可解决分布式重复执行问题 如果业务工程采用集群化的部署,可能会多次重复执行定时任务而导致系统的业务逻辑错误,并产生系统故障。 job.properties simple.id=recommendJobs...

lsjlgo
32分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部