我卸载DLL时需要销毁一些对象。该对象包含一个有时调用WSASocket函数的线程(用于重新连接连接)。因此,我从DllMain调用析构函数来响应DLL_PROCESS_DETACH
,但这导致我的应用程序挂起。具体来说,对WSASocket的调用会锁定。
我知道无法从DllMain调用某些函数,尤其是调用LoadLibrary和FreeLibrary的函数。但是为什么WSASocket函数有同样的问题?
答案 0 :(得分:0)
这是因为你不应该为这个原因使用DllMain。许多系统过程将导致从DllMain调用死锁。声明一个额外的导出过程,特别是对你的dll的初始化,并在FreeLibrary之前调用它。
另外,我建议你阅读MSFT的“Best Dll Practices”。远离DllMain有很多理由。