인프런 커뮤니티 질문&답변

SIsB님의 프로필 이미지
SIsB

작성한 질문수

Windows 시스템 프로그래밍 - 기본

멀티스레드 환경을 고려한 DLL 개발

명시적 로딩 dll의 thread attach 관련 여쭤볼 부분이 있습니다

해결된 질문

작성

·

211

0

예시로 보여주신 부분 중에 명시적으로 main thread 에서 dll을 로딩하고 추가적인 thread를 생성했을 때 dllmain의 thread attach 이벤트가 호출되는데 얘기해주시는 설명에서는 thread 마다 dll을 명시적으로 로딩하고 프리해줘야 사용할 수 있다고 해주셔서요

추가적으로 만든 thread에서 dll 명시적 로딩을 하지 않음에도 main thread에서 명시적 로딩한 dll의 dllmain의 thread attach 가 호출되는 부분이 궁금합니다 다른 thread에서 main thread 에서 명시적 로딩한 dll의 hmodule과 함수포인터를 얻어와 바로 사용해도 되는걸까요?

강의 감사합니다!

답변 1

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

DLL을 명시적으로 로드한 경우 라이브러리를 로드한 프로세스가 작업자 스레드를 생성할 때마다 DllMain() 함수가 호출되며 매개변수로 DLL_THREAD_ATTACH가 전달됩니다. 이러한 호출은 단순히 스래드가 새로 생성된 것임을 알리기 위한 것으로만 이해하면 됩니다.

새로 생성된 작업자 스레드에서 메인 스레드가 로드한 모듈 핸들을 사용해 별도의 LoadLibrary() 호출 없이 사용할 경우 GetProcAddress() 함수가 함수 주소를 반환하지 못하는 오류가 발생합니다. 그러므로 바로 사용하는 것은 적절치 않겠습니다.

SIsB님의 프로필 이미지
SIsB

작성한 질문수

질문하기