2013-04-25 45 views
0

當我的DLL被卸載時,我需要銷燬一些對象。該對象包含一個有時調用WSASocket函數的線程(用於重新連接連接)。所以,我調用DllMain的析構函數來響應DLL_PROCESS_DETACH,但這會導致我的應用程序掛起。具體來說,對WSASocket的調用會鎖定。爲什麼從DllMain調用WSASocket導致掛起?

我知道某些函數不能從DllMain調用,尤其是調用LoadLibrary和FreeLibrary的函數。但是爲什麼WSASocket函數有這個相同的問題?

回答

0

這是因爲你不應該爲此使用DllMain。許多系統特效會導致從DllMain調用死鎖。聲明一個額外的導出過程,特別是對你的dll進行初始化並在FreeLibrary之前調用它。

此外,我建議您閱讀MSFT的「最佳Dll實踐」。有很多理由遠離DllMain。