- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在处理用 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 代码中执行 begin
时,操作系统已经在您的库中调用了 DllMain
。所以当你的 DllProc := DllMain;
语句执行时已经太晚了。当 dll 附加到进程时,Delphi 编译器不允许执行用户代码。建议的解决方法(如果您可以称之为解决方法)是在单元初始化部分或库代码中自行调用您自己的 DllMain
函数:
begin
DllProc := DllMain;
DllMain(DLL_PROCESS_ATTACH);
end;
Note: DLL_PROCESS_ATTACH is passed to the procedure only if the DLL's initialization code calls the procedure and specifies DLL_PROCESS_ATTACH as a parameter.
关于windows - Delphi DllMain DLL_PROCESS_DETACH 在 DLL_PROCESS_ATTACH 之前调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10377343/
我在处理用 Delphi 编写的 DLL 时遇到了很多麻烦。我已经使用库中的以下代码设置了一个 DllMain 函数: begin DllProc := DllMain; end. 我的 DllM
在 DLLMAIN()/DLL_PROCESS_ATTACH 中加载 DLL 可能会导致问题。但是 COM Objects 可以使用 e.q. 实例化。 CoInitialize()/CoCreate
我正在尝试加载一个 .dll 文件并让它在加载时显示一个消息框。根据我的理解,一旦加载了 .dll,它就会调用 dllmain() 并切换到 DLL_PROCESS_ATTACH 选项。我已经为 .d
我是一名优秀的程序员,十分优秀!