我遇到了很多麻烦来处理我在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调用,但情况似乎并非如此。
这里发生了什么事情?!
DLL_PROCESS_ATTACH
。所以你只需要按照Sertac的方式编写它,就没有问题了。 - David Heffernan