请问以下代码的含义?(170分)

  • 主题发起人 主题发起人 ccw77128
  • 开始时间 开始时间
C

ccw77128

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure ModuleUnload(Module: Integer);
var
I: Integer;
begin
if IsObject(FCipherList, TStringList) then
for I := FCipherList.Count-1 downto 0 do
if FindClassHInstance(TClass(FCipherList.Objects)) = Module then
FCipherList.Delete(I);
end;

initialization
AddModuleUnloadProc(ModuleUnload);
finalization
RemoveModuleUnloadProc(ModuleUnload);
end.
 
AddModuleUnloadProc是什么东东?
好像既不是Delphi过程,也不是Win32API函数。
是你自定义的过程吧,把它的定义提出来瞧瞧。
 
大概是把对象列表里实例句柄为 module 的对象都删除。

个人认为以下代码写错了。
initialization
AddModuleUnloadProc(ModuleUnload);
finalization
RemoveModuleUnloadProc(ModuleUnload);
end.
 
看一下Classes.pas最后几行
 
AddModuleUnloadProc 是干什么的?
 
这和AddExitProc应该是一个意思
就是在模块卸载之前要求程序先调用你的处理过程ModuleUnload

在initialization时在ModuleUnloadList中加入一个过程钩子
AddModuleUnloadProc(ModuleUnload)
在finalization时去掉ModuleUnloadList中的过程钩子
RemoveModuleUnloadProc(ModuleUnload)
那么在NotifyModuleUnload中会调用ModuleUnload过程

(在System.pas中)

 
ModuleUnload中传入的参数Model是什么意思?
 
我没见过这段代码
但这里ModuleUnload中传入的参数Model应该时模块的句柄
就象HInstance一样
 
我是说以前没见过 :)

这里的意思是说:
需要用到一些密码算法,
当然算法是动态加载的,
可能有很多种密码算法,也可能一种都没有,
一种算法一个包(模块),
加载时将密码算法放在FCipherList中,
并加入ModuleUnload过程以便卸载时,将它从FCipherList中去掉

不好意思...
这些都是我瞎猜的
我只想看看我猜得是否能挨点边而已 :-(

 
那么为什么不直接在Finalization里加上这么一句:
FCipherList.Clear;
 
to ccw77128:
别的模块怎么办?
你的卸载了,别的还要用呢
 

我不回答这个问题了
我把邮件通知取消了
sorry
这个题目我也说不太明白,
有请高手来解答吧
 
贴代码也不能只帖一点点嘛。
我看了半天不知道什么意思?
 
后退
顶部