DllMain附加和分离过程中的使用限制

时间:2011-04-29 16:11:37

标签: c++ winapi dll mfc

我的一位同事在DllMain Detach过程中遇到了麻烦。他的错误似乎并不是出现在所有情况下,而是经常出现。

在尝试帮助他时,我记得在DllMain附加和分离过程中有一些使用限制,但我不确定我是否记得很清楚,因为它是2年的技术讨论而且它我不是在解决终止问题。

即我记得我们应该:

  • 避免使用new和delete运算符,而更喜欢HGLOBAL内存分配
  • 避免在此处理线程终止。

如果我错了,你可以纠正我吗,如果有的话,请解释我,或者指出一篇能解决这些问题的技术文章。

3 个答案:

答案 0 :(得分:7)

答案 1 :(得分:3)

大多数问题都是由于加载程序锁定冲突引起的。 DllMain不应该长时间运行,或者如果可以避免则使用锁。

良好的背景here

答案 2 :(得分:1)

查找包含主题的文档

[1]" Dll主要入口点"

[2]"延迟加载DLL的约束"

[3]"动态链接库最佳实践"

[4] Jefrey Richter,Windows via C ++,第20章。

(抱歉,由于stackoverflow策略,我无法提供URL引用)

<强>摘要

  1. 也许其他DllMain已被执行,也许不是。不要调用其他DLL的函数

  2. 请勿拨打以下内容: &#34; FreeLibrary则/调用LoadLibrary / CreateProcess的/了ExitThread / GetStringType&#34;

  3. 不要从User32.dll,Gdi32.dll调用函数

  4. 如果CRT未初始化,请不要使用内存管理功能 (我认为仅限于初始化阶段)

  5. 您应该了解文档中的哪个线程上下文。

  6. 执行以下操作是合法的:创建并初始化同步对象。打开,读取和写入文件。