0

当我的 DLL 被卸载时,我需要销毁一些对象。该对象包含一个有时调用 WSASocket 函数(用于重新连接连接)的线程。因此,我从 DllMain 调用析构函数以响应DLL_PROCESS_DETACH,但这会导致我的应用程序挂起。具体来说,对 WSASocket 的调用被锁定。

我知道有些函数不能从 DllMain 调用,尤其是调用 LoadLibrary 和 FreeLibrary 的函数。但是为什么 WSASocket 函数会出现同样的问题呢?

4

1 回答 1

0

这是因为您不应该为此使用 DllMain。许多系统过程会导致从 DllMain 调用死锁。声明一个额外的导出过程,特别是用于取消初始化您的 dll 并在 FreeLibrary 之前调用它。

另外,我建议您阅读 MSFT 的“Best Dll Practices”。远离 DllMain 的原因有很多。

于 2013-10-21T10:02:22.030 回答