Delphi调用16位或32位动态库的方法
16位与32位动态库调用方法相同。
语法:
[Public Private | protected] Function FunctionName([Var] [Arg1
ataType1;] [Arg2
ataType2;...]) [:ReturnDataType]; far;stdcall;external 憀ibname?[Name AliasName];
调用语句的语法包含下面部分:
关键字Public(可选),表示函数可以被程序代码中的任意部分访问。
关键字Private(可选),表示函数在声明类的单元(源代码)外不能访问。
关键字Protected(可选),表示保护函数,保护元素只能被当前类和它的子类访问。
关键字Function(必选),表示调用函数,函数有返回值。
FunctionName(必选),调用外部函数的名称,区分大小写。
关键字Var(可选),表示通过引用传递参数,函数参数可以用值传递,也可以通过引用传递。通过引用传递参数,它的值没被复制到存放函数例程参数的堆栈中,程序执行速度快。通过引用传值,将允许过程和函数改变参数的值。
ArgN
ataTypeN(可选),参数名以及参数类型,传递的参数类型可以是:Shorint,Smallint,Longint,Integer(16/32),Single,Double,Extended,Currency,Date,Pchar,Object,Variant等。
ReturnType(可选),函数返回值的类型。
Stdcall(必选),表示传递约定,这样调用模块(应用程序),与被调用模块(DLL)就使用相同的参数约定。
关键字external(必选),声明访问外部函数。
Libname(必选),访问的DLL名称,16位Delphi中外部声明不带扩展名的库名。
Name 慉liasName挘?裳。?琋ame指令可以为外部函数起别名,避免与系统例程和函数名称冲突。
外部程序调用的DLL函数,必须遵照下列规则:
(1)必须列在DLL的exports子句中。
(2)在Delphi3中,调用函数还需被声明为stdcall,来使用标准的WIN32参数传递技术。代替优化的register参数传递技术。
(3)在WIN32中,DLL可以使用全局数据,该数据将不会通过调用应用程序来分享,每当应用程序装载DLL时,它在自己的地址空间中存储着DLL的全部数据。