我在处理用 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 调用,但情况似乎并非如此。
这是怎么回事?!