《Object Pascal 动态加载库、包与接口全解析》
1. 动态加载库的编写
动态加载库的代码可通过 ExitProc
变量安装退出程序,当库卸载时,该退出程序会执行。库初始化代码可通过将 ExitCode
变量设为非零值来发出错误信号, ExitCode
在 System
单元中声明,默认值为零,表示初始化成功。若库的初始化代码将 ExitCode
设为其他值,库会被卸载,调用应用程序会收到失败通知。若初始化代码执行期间出现未处理的异常,调用应用程序也会收到加载库失败的通知。
以下是一个带有初始化代码和退出程序的库示例:
library Test;
var
SaveExit: Pointer;
procedure LibExit;
begin
// library exit code
ExitProc := SaveExit;
// restore exit procedure chain
end;
begin
// library initialization code
SaveExit := ExitProc;
// save exit procedure chain
ExitProc := @LibExit;
// install LibExit exit procedure
end.
当库卸载时,会重复调用 ExitProc
中存储的地址来执行退出程序,