aar*_*rkk 9 windows delphi dll
我在处理用Delphi编写的DLL时遇到了很多麻烦.我使用库中的以下代码设置了DllMain函数:
begin
DllProc := DllMain;
end.
Run Code Online (Sandbox Code Playgroud)
我的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;
Run Code Online (Sandbox Code Playgroud)
我发现在调用ATTACH之前,调用者(我无法控制)似乎会调用DETACH(两次?!).这是可能的,还是我误解了这应该如何工作?我的期望是每个ATTACH呼叫都会遇到匹配的DETACH呼叫,但情况似乎并非如此.
什么在这里??!
Ser*_*yuz 12
不幸的是,当begin你的dll代码执行时,操作系统已经调用DllMain了你的库.所以当你的DllProc := DllMain;语句执行时已经太晚了.当dll附加到进程时,Delphi编译器不允许用户代码执行.建议的解决方法(如果你可以称之为解决方法)是DllMain在单元初始化部分或库代码中自己调用自己的函数:
begin
DllProc := DllMain;
DllMain(DLL_PROCESS_ATTACH);
end;
Run Code Online (Sandbox Code Playgroud)
的相关文件:
注意:仅当DLL的初始化代码调用过程并将DLL_PROCESS_ATTACH指定为参数时,DLL_PROCESS_ATTACH才会传递给过程.
| 归档时间: |
|
| 查看次数: |
5755 次 |
| 最近记录: |