为什么从DllMain调用WSASocket导致挂起?

时间:2013-04-25 08:39:55

标签: c++ windows winapi dll dllmain

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

我知道无法从DllMain调用某些函数,尤其是调用LoadLibrary和FreeLibrary的函数。但是为什么WSASocket函数有同样的问题?

1 个答案:

答案 0 :(得分:0)

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

另外,我建议你阅读MSFT的“Best Dll Practices”。远离DllMain有很多理由。