Lyn
조회 수 25014 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

DLLMain은 WinMain 이나 main 과는 다르게 제약이 많다.

나도 이걸로 크래시 낸 적이 많이몇번 있고 ... 


DLLMain은 일종의 "객체의생성자" 라고 보면 비슷하다.

"로딩중" 인 것이지 로딩이 끝난것이 아니다 라는것이다.


아래에는 Attach 시 기준으로 적었지만, Detach 에도 별 다를건 없다. kerner32.dll 이외의 dll은 이미 언로딩 되어있을 수도 있다.


이제 하지 말아야할것을 슬~슬 나열 해 보자. 


1. kernel32.dll 이외의 dll에 있는 함수 대부분.

kernel32.dll 이외의 dll이 로딩되어 있다는 보장은 전혀없다


2. 동기화코드

락, 언락 등의 코드


3. LoadLibrary, CreateProcess

다른 DLL 쓰지말라는말과 일맥상통. 


4. 전역객체 초기화, 메모리할당 등

메모리메니저가 로딩되었다는 보장이 없다


5. COM관련 코드

역시 보장없다


6. 예외 throw

C++ 객체 생성자에서 throw 하는것과 비슷한 대략므흣한 (...) 상황이 발생한다.


결론. 

DLLMain은 걍 비워 둬라. 그리고 Initialize 함수를 제공해라.
상당수의 라이브러리가 라이브러리 초기화 함수를 제공하는것은 다 이유가 있다!

(당장 GDI+와 Winsock2를 생각해봐라!) 

?

List of Articles
번호 제목 글쓴이 날짜 조회 수
37 특정 Thread가 Wait계열 함수에 의해 Block 중인지 확인하기 file Lyn 2012.06.28 27200
36 [작성중] C++ 에서 Fiber 를 이용한 Coroutine 사용하기 file Lyn 2012.04.03 24613
35 [작성중] v8 스크립트 연동 file Lyn 2012.03.10 25125
34 [작성중] 알려진 포트 Lyn 2012.02.20 24621
33 C++11 lambda 간단사용법과 성능비교. 4 file Lyn 2012.01.30 32247
32 Boost 빌드 방법 1 Lyn 2012.01.14 31514
» DLLMain에서 하지 말아야 할것. Lyn 2012.01.12 25014
30 새해다 ... Lyn 2012.01.01 28074
29 Trac, Mantis, Redmine + SVN 소스 한글 깨짐 Lyn 2011.12.20 29726
28 MultiMedia Timer 의 Timer 해상도의 비밀 file Lyn 2011.12.14 28100
27 Intel Cilk plus And SampleCode - Parallel Programming file Lyn 2011.11.23 27878
26 Visaul Studio Exception 발생시 해결방법 1 file Lyn 2011.11.10 28221
25 [Boost 살펴보기] 9. noncopyable Lyn 2011.09.15 27425
24 Mysql 툴 Lyn 2011.03.31 37437
23 [개인자료] 프로그램 만들때 무조건 해야하는것.. Lyn 2011.01.26 37117
22 사용중인 FireFox 플러그인. Lyn 2010.05.18 42335
21 Google C++ Coding Style - 번역중 Lyn 2010.03.28 39269
20 Boost 에서 자기 자신의 shared_ptr 리턴하기 file Lyn 2010.03.02 37744
19 [잡설] 앱스토어의 유행. 프로그래머에겐 과연? Lyn 2010.02.19 34305
18 [잡설]델파이 / C++ Builder 하는 사람들의 문제점. Lyn 2010.02.07 39620
Board Pagination Prev 1 ... 2 3 4 5 6 7 ... 8 Next
/ 8