페이지

글타래

2009년 6월 14일 일요일

MFC에 정적 또는 동적으로 링크하는 기본 DLL

MFC에서 DLL의 종류는 두가지이다.
_USRDLL(MFC정규DLL)과 _AFXDLL(MFC확장DLL)이다.
_USRDLL은 MFC라이브러리의 초기화 종료를 위해 하나의 CWinApp 객체를 필요로한다.
_AFXDLL은 CWinApp 객체를 필요로 하지 않는다.
이는 애플리케이션의 MFC 클래스들을 공유하기 때문이다. AFXEXT는 AFXDLL이다.
_AFXDLL이 정의가 되면, AfxGetResourceHandle함수로 리턴되는 값은 MFC의 전역 변수로 저장된 값이 리턴되는데 이 값은 EXE나 확장 DLL또는 MFC DLL 모두가 공유하는 값이다.
엄격히 말해, 리소스를 로드한다는 말은 인스턴스 핸들 보다는 모듈 핸들가 연관있다. (인스턴스는 각 다른 데이타를 갖는 모듈(즉, 코드와 리소스들)들을 공유한다. )
DLL은 EXE의 핸들과 다른 모듈 핸들을 갖는다.
::GetModuleHandle을 DLL의 모듈핸들을 얻기 위해 쓸수 있고, AfxSetResourceHandle을 통해서 DLL이 리소스를 찾을려고 할때 바로 찾을수 있게 처음에 위치하게 할 수 있다. 그러나 알아둘점은 이렇게 하게 되면 .EXE 모듈을 찾을 수 없게 된다. 그래서 보통 AfxSetResourceHandle을 호출하기전에 AfxGetResourceHandle로 핸들값을 복사해 저장한다.
DLL리소스의 로드가 끝나면 다시 EXE모듈 핸들을 세팅하면된다.(http://webdizen.new21.net/blog/2520)

DLL을 MFC 라이브러리에 정적으로 링크시키는 기술에 대한 자세한 내용은 Technical Note 11: Using MFC as Part of a DLL을 참조하십시오. DLLScreenCap 샘플은 확장 DLL이 되지 않고도 MFC에 동적으로 링크될 수 있습니다. MFC에 정적으로 링크시켜 사용자 지정 DLL을 구현하려면, 먼저 DLL Version of MFC의 설명과 DLLHUSK 샘플에서 보여 주는 것처럼 DLL을 MFC 확장 DLL로 구현할 것을 고려하십시오.

DLL version of MFC xx ~ 90
http://msdn.microsoft.com/ko-kr/library/hw85e4bb.aspx

댓글 없음:

댓글 쓰기