【发布时间】:2012-04-30 00:51:48
【问题描述】:
我在处理用 Delphi 编写的 DLL 时遇到了很多麻烦。我在库中使用以下代码设置了一个 DllMain 函数:
begin
DllProc := DllMain;
end.
我的DllMain 程序如下所示:
procedure DllMain(reason: Integer);
begin
if reason = DLL_PROCESS_DETACH then
OutputDebugString('DLL PROCESS DETACH')
else if reason = DLL_PROCESS_ATTACH then
OutputDebugString('DLL PROCESS ATTACH')
else if reason = DLL_THREAD_ATTACH then
OutputDebugString('DLL THREAD ATTACH')
else if reason = DLL_THREAD_DETACH then
OutputDebugString('DLL THREAD DETACH')
else
OutputDebugString('DllMain');
end;
我发现 DETACH 似乎在调用 ATTACH 之前被调用者(我无法控制)调用(两次?!)。这甚至可能吗,还是我误解了这应该如何工作?我的期望是每个 ATTACH 调用都会得到匹配的 DETACH 调用,但事实并非如此。
这是怎么回事?!
【问题讨论】: