dll的创建与调用
tiDLL参数调用约定
——————————————————————
令 传递顺序 参数删除
stdcall 从左到右 函数方面
cdecl 从右到左 调用方面
pascal 从左到右 函数方面
register 从左到右 函数方面
━━━━━━━━━━━━━━━━━━━━━━
退出过程编译时必须关闭stack_checking,因而需设置编译指示 {$S-} 。
━━━━━━━━━━━━━━━━━━━━━
//——————————dll的创建
brary mydll
{$S-}
//————————uses单元
uses
classes,stdsys, form in form.pas{form};
//—————————变量声明
var
love:string;
baby:integer;
SaveExit: Pointer;
//—————————函数和过程
procedure myinnerproc();stdcall; //内部使用过程
begin
{添入代码}
end;
procedure myproc(var love:string);stdcall;export; //输出可以调用过程
begin
{添入代码}
end;
function myfunction(baby:integer):integer;stdcall;export;//可调用函数
begin
{添入代码}
end;
procedure LibExit; far;
begin
if ExitCode = wep_System_Exit then
begin
{ 系统关闭时的相应处理 }
end
else
begin
{ DLL卸出时的相应处理 }
end;
ExitProc := SaveExit; { 恢复原来的退出过程指针 }
end;
//——————————输出说明
exports
myproc name myproc index 1,
myfunction name myfuntion index 2 risdent;//输出信息始终保持在内存中{risdent}
//——————————初始化工作
begin
{DLL的初始化工作 }
SaveExit := ExitProc; { 保存原来的退出过程指针 }
ExitProc := @LibExit; { 安装新的退出过程 }
End.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
表10.1 ExitCode的取值与意义 :取 值 意 义
—————————————————————
WEP_System_Exit Windows关闭
WEP_Free_DLLx DLLs被卸出
━━━━━━━━━━━━━━━━━━━━━
//--------------调用dll
1。静态调用
在静态调用一个DLLs中的过程或函数时,external指示增加到过程或函数的声明语句中。
被调用的过程或函数必须采用远调用模式。这可以使用far过程指示或一个{$F +}编译指示。
Delphi全部支持传统Windows动态链接库编程中的三种调用方式,它们是:
● 通过过程/函数名
● 通过过程/函数的别名
● 通过过程/函数的顺序号
//————————————————————静态调用举例
unit windows
补充:软件开发 , Delphi ,