我的一位同事在DllMain Detach过程中遇到了麻烦。他的错误似乎并不是出现在所有情况下,而是经常出现。
在尝试帮助他时,我记得在DllMain附加和分离过程中有一些使用限制,但我不确定我是否记得很清楚,因为它是2年的技术讨论而且它我不是在解决终止问题。
即我记得我们应该:
如果我错了,你可以纠正我吗,如果有的话,请解释我,或者指出一篇能解决这些问题的技术文章。
答案 0 :(得分:7)
避免调用LoadLibrary和相关的API。
除了史蒂夫的链接,这里还有雷蒙德·陈的The Old New Thing的一些好的相关帖子:
答案 1 :(得分:3)
大多数问题都是由于加载程序锁定冲突引起的。 DllMain
不应该长时间运行,或者如果可以避免则使用锁。
良好的背景here。
答案 2 :(得分:1)
查找包含主题的文档
[1]" Dll主要入口点"
[2]"延迟加载DLL的约束"
[3]"动态链接库最佳实践"
[4] Jefrey Richter,Windows via C ++,第20章。
(抱歉,由于stackoverflow策略,我无法提供URL引用)
<强>摘要强>
也许其他DllMain已被执行,也许不是。不要调用其他DLL的函数
请勿拨打以下内容: &#34; FreeLibrary则/调用LoadLibrary / CreateProcess的/了ExitThread / GetStringType&#34;
不要从User32.dll,Gdi32.dll调用函数
如果CRT未初始化,请不要使用内存管理功能 (我认为仅限于初始化阶段)
您应该了解文档中的哪个线程上下文。
执行以下操作是合法的:创建并初始化同步对象。打开,读取和写入文件。