DLL技术应用02 – 零基础入门学习Delphi45

2014-06-08 21:04
策略和技术

DLL技术应用02

让编程改变世界

Change the world by program

DLL的编写

在Delphi环境中,编写一个DLLs和编写一个一般的应用程序并没有太大的区别。

事实上作为DLLs主体的DLL函数的编写,除了在内存、资源的管理上有所不同外,并不需要其他特别的手段。

根据DLL完成的功能,我们把DLL分成三类:完成一般功能的DLL、用于数据交换的DLL和用于窗体重用的DLL。

下面通过一个实际的例子来讲解完成一般功能的DLL的编写方法。

要求:创建一个DLL,该DLL中包含两个函数,分别用于求三个数的最大值和最小值。

小甲鱼一边讲一边给大家演示:

步骤一:建立DLL程序框架

宽客网,量化投资,宽客俱乐部

一般工程文件和DLL工程文件区别

注意

注释的中文含义: 在DLL中,如果导出过程或函数的参数为字符串或动态数组,或者函数的返回值为字符串或动态数组,则在uses语句中应包含ShareMem单元,要将ShareMem单元放在最前。ShareMem是共享的内存管理器Borlandmm.dll的接口单元,Borlandmm.dll必须一起发布。另外一种解决办法就是利用PChar或ShortString类型来传递字符串信息,可以不用在uses语句中包含ShareMem单元。

步骤二:建立过程和函数

注意:定义函数时使用的“stdcall”是一种调用约定,如果程序员希望自己的DLL库函数能够被其他程序设计语言的程序调用,应使用stdcall调用约定。

默认的调用约定为register,该约定是最快的参数传递约定,但其他程序设计语言可能不支持该调用约定。

主要的调用约定关键字如表:

宽客网,量化投资,宽客俱乐部

主要的调用约定关键字

DLL的过程和函数想要在外部被使用,要用Exports语句声明供其他应用程序调用的函数和过程名。

可以利用标准指示name、Index、resident以方便和加速过程、函数的调用。

name

name后面接一个字符串常量,作为该过程或函数的输出名。

如:

exports

InStr name ‘MyInstr’;

其他应用程序将用新名字(MyInstr)调用该过程或函数。

如果仍利用原来的名字(InStr),则在程序执行到引用点时会引发一个系统错误。

Index

Index指示为过程或函数分配一个顺序号。

如果不使用Index指示,则由编译器按顺序进行分配。

Index后所接数字的范围为1~32767。

使用Index可以加速调用过程。

resident

使用resident,则当DLLs装入时特定的输出信息始终保持在内存中。

这样当其他应用程序调用该过程时,可以此利用名字扫描DLL入口以降低时间开销。

对于那些其他应用程序常常要调用的过程或函数,宜于使用resident 指示。例如:

exports

InStr name ‘MyInStr’ resident;

注意:

exports子句可以出现在程序的声明部分,也可以出现在单元文件的interface或implementation中的任意位置,出现的次数也没有限制。

但一般来说,程序中很少使用exports语句。

当要输出重载的函数或过程时,必须要在exports 子句中起别名和指明参数列表,例如:

exports

Max(x,y,z:integer) Name ‘MaxInt’;

Max(x,y,z:Real) Name ‘MaxReal’;

视频下载
技术, IT技术, Delphi, 视频教程

点击切换 到互动模式(当前为阅读模式)