【发布时间】:2011-08-15 14:59:59
【问题描述】:
我的一位同事在 DllMain Detach 过程中遇到了麻烦。他的错误似乎并非在所有情况下都出现,但相当频繁。
在尝试帮助他的过程中,我有点记得 DllMain 附加和分离过程中的一些使用限制,但我不确定我是否记得很好,因为这是 2 年前的技术讨论不是我在处理那些终止问题。
也就是说,我有点记得我们应该:
- 避免使用 new 和 delete 运算符,而更喜欢 HGLOBAL 内存分配
- 避免在此处处理线程终止。
如果我错了,你能纠正我吗,如果有的话,请解释我,或者指出一篇可以处理这些问题的技术文章。
【问题讨论】:
-
总结:不要在 DllMain 中放置任何涉及任何 DLL 的内容,包括 Windows DLL。乍一看 Kernel32.dll 是安全的,但深入检查后,即使它的调用也不能保证是安全的。
-
HGLOBAL/HLOCAL 无关紧要。微软甚至这么说(备注下):msdn.microsoft.com/en-us/library/windows/desktop/…——“因此,GlobalAlloc 和 LocalAlloc 函数本质上是相同的。”