2013-04-25 3 views
0

DLL을 언로드 할 때 일부 개체를 파괴해야합니다. 이 객체에는 WSASocket 함수 (연결 재 연결 용)를 호출하는 스레드가 있습니다. 그래서, 난 DLL_PROCESS_DETACH에 대한 응답으로 DllMain에서 소멸자를 호출하지만 그 때문에 내 응용 프로그램이 중단됩니다. 특히, WSASocket에 대한 호출이 잠 깁니다.DllMain에서 WSASocket을 호출하면 중단되는 이유는 무엇입니까?

DllMain에서 일부 함수를 호출 할 수 없다는 것을 알고 있습니다. 특히 LoadLibrary 및 FreeLibrary를 호출하는 함수를 호출 할 수 있습니다. 하지만 WSASocket 함수에 이와 같은 문제가있는 이유는 무엇입니까?

답변

0

그 이유 때문에 DllMain을 사용하면 안되기 때문입니다. 많은 시스템 procs는 DllMain에서 호출되는 교착 상태를 유발합니다. 특히 dll의 초기화를 해제하기위한 추가 내보내기 proc을 선언하고 FreeLibrary 바로 전에 호출하십시오.

또한 MSFT에서 "Best Dll Practices"를 읽는 것이 좋습니다. DllMain을 멀리해야 할 이유가 많이 있습니다.

관련 문제