delphi - 如何从目标 BPL 中检测 UnloadPackage?
问题描述
是否有部分代码在卸载动态包调用UnloadPackage
函数时执行?
var
MyPackageHandle : THandle;
begin
MyPackageHandle := LoadPackage('.\MyPackage.bpl');
if(MyPackageHandle <> 0) then
UnloadPackage(MyPackageHandle);
end;
在这种情况下,我需要在MyPackage.bpl卸载时执行一些代码
解决方案
finalization
一般规则是您应该将在您的包卸载到您的单元部分时需要调用的代码。我从您的其他软件包中知道您正在尝试卸载 dll。但问题是永远不应该从initialization
or加载/卸载 dll finalization
。
所以你需要做的是在你的包中有一个函数,你将从你的主应用程序中调用它来执行清理。
type
TCleanup = procedure;
var
MyPackageHandle : THandle;
CleanupProc: TCleanup;
begin
MyPackageHandle := LoadPackage('.\MyPackage.bpl');
if(MyPackageHandle <> 0) then
begin
@CleanupProc := GetProcAddress(MyPackageHandle, 'Cleanup' );
if @CleanupProc <> nil then
CleanupProc;
UnloadPackage(MyPackageHandle);
end;
end;
推荐阅读
- ios - 使用 UICollectionView 为单元格加载不同的高度
- c++ - 如何在 C++ 中将数字添加到字符串的末尾?
- jquery - jQuery - onClick 获取此属性 id 的等于变量 html 的内容
- azure - 我可以关闭 Azure 应用服务以节省 azure 的成本吗?
- spring-security - 如何通过 Gradle 安装快照 jar?
- c# - 为什么 TaglibSharp 无法读取我的 Id3v2 标签?
- go - MaxActive / wait 可能不起作用,仍在创建数千个连接
- python - 数据类型有问题。不能在整数和(函数?)之间使用 > 运算符
- android - 如何使背景覆盖 recyclerView?
- ios - 边框颜色没有改变