Delphi语言学习10-编写动态链接库

本文包括如下话题:

  • 导出分句
  • 动态链接库初始化
  • 全局变量
  • 库和系统变量

1.使用导出分句

    下面是的例子是用动态链接库(dll)编写的两个函数,Min和Max

ContractedBlock.gif ExpandedBlockStart.gif Code
library MinMax;
    
function Min(X, Y: Integer): Integer; stdcall;
 
begin
   
if X < Y then Min := X else Min := Y;
 
end;
 
function Max(X, Y: Integer): Integer; stdcall;
 
begin
   
if X > Y then Max := X else Max := Y;
 
end;
   
exports
     Min,
   Max;
 
begin
 
end.

 

2.动态链接库初始化

1)动态链接库的初始化代码的DllProc函数在动态链接库第一加载到内存,一个线程启动或停止,或者一个动态链接库卸载的时候执行。

2)调用动态链接库的单元的初始话代码在动态链接库初始化代码执行后执行

3)动态链接库的结束代码在单元代码结束代码执行前执行。

ContractedBlock.gif ExpandedBlockStart.gif Code
library Test;
var
 SaveDllProc: Pointer;
 
procedure LibExit(Reason: Integer);
begin
 
if Reason = DLL_PROCESS_DETACH then
  
begin
    .
                .   
// library exit code
                . 
  
end;
   SaveDllProc(Reason);     
// call saved entry point procedure
  
end;
 
begin
    .
                .             
// library initialization code
                .
  SaveDllProc :
= DllProc;       // save exit procedure chain
  DllProc :
= @LibExit;      // install LibExit exit procedure

 

3.动态链接库的全局变量

动态链接库中的全局变量不能导出到Delphi应用程序。

4.系统变量(用作动态链接库回调函数的返回值)

DLL_PROCESS_DETACH  
Indicates that the library is detaching from the address space of the calling process as a result of a clean exit or a call to FreeLibrary. (动态链接库卸载) 
DLL_PROCESS_ATTACH  
Indicates that the library is attaching to the address space of the calling process as the result of a call to LoadLibrary. (动态链接库加载) 
DLL_THREAD_ATTACH  
Indicates that the current process is creating a new thread. (动态链接库进入一个新线程) 
DLL_THREAD_DETACH  
Indicates that a thread is exiting cleanly. (动态链接库从一个线程退出)

 5.异常处理

1)用Delphi调用Delphi编写的DLL可以使用 try...except 捕获

2)其他语言调用Delphi编写的Dll可以使用系统变量$0EEDFADE,它是一个数组,第一个入口地址是异常的系统地址,第二个入口是Delphi异常对象( Delphi exception object)。

注意:

如果不使用SysUtils单元,异常机制将不起作用。当程序发生异常时,应用程序会从系统中退出。

6.在Win32下动态链接库的共享内存管理

如果动态链接库数据的数据类型是应用类型(比如:long strings,动态数组,对象,结构体等等),则客户程序必须引用ShareMem单元。

转载于:https://www.cnblogs.com/wxf82610/archive/2009/02/17/1392174.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值