'dllmain'에 해당되는 글 1건

  1. 2008.11.27 DllMain 함수 코딩시 주의점 (이글루스 예전글)

DllMain 함수 코딩시 주의점 (이글루스 예전글)

C++ 2008. 11. 27. 17:13
DllMain 에서 DLL_PROCESS_ATTACH 와 DLL_PROCESS_DETACH 처리 코딩시에 주의가 필요하다.

DLL_PROCESS_ATTACH 및 DLL_PROCESS_DETACH 코딩안에서
kernel32.dll 안의 함수를 제외한 User, Shell 그리고 COM functions 등을 사용하는 부분을 처리하지 말라.
이유는 해당 DLL 의 entry point 진입시에 사용할 user, shell, com 함수등을 사용하기 위한 필요 dll이 아직 로딩되지 않았거나(ATTACH 시에), 혹은 DETACH 시에 이미 필요 dll 등이 해제된 경우가 발생할 수 있기 때문이다.

예를 들어
DLL_PROCESS_ATTACH 처리 안에서 다른 COM 을 초기화시키거나 다른 dll 을 로딩하는 코딩 혹은 이미 다른 dll 이 로딩되었다고 가정하고 dll 내부 함수를 호출할 경우, 처리에 필요한 dll 등이 실제로는 아직 로딩되지 않아서 access violation 등의 오류가 발생할 수 있다. 단 kernel32.dll 내의 함수 사용은 항상 가능하다. kernel32.dll 은 해당 dll 의 진입시에 이미 로딩되어 있음을 보장하기 때문이다.

보다 자세한 내용은 MSDN DllMain 함수 내용을 참고할 것.
: