인스턴스 핸들이란?
모든 실행 파일과 DLL 파일은 프로세스의 메모리 공간 상에 로드될 때 고유의 인스턴스 핸들을 할당 받는다.
이 인스턴스 핸들은 WinMain의 첫번째 매개변수인 hInstance를 통해 전달된다.
그리고 이 핸들 값은 다음과 같이 보통 리소스를 로드할 때 사용된다.
HICON LoadIcon ( HINSTANCE hInstance, PCTSTR pszIcon);
많은 애플리케이션에서 WinMain의 hInstance 매개변수를 전역변수로 저장해 두고 사용한다.
아래와 같이 HMODULE형 인자를 요구하는 함수들이 있으며, HMODULE과 HINSTANCE는 완전 동일하다.
(16비트 윈도우에서 구분되었지만 지금은 혼용)
DWORD GetModuleFileName (HMODULE hInstModule, PTSTR pszPath, DWORD cchPath);
hInstance의 값은?
WinMain의 hInstance 매개변수의 실제 값
: 시스템이 프로세스의 메모리 주소 공간 상에 실행 파일을 로드할 시작 메모리 주소
- 예를 들어, 시스템이 실행 파일을 열어 그 내용을 0x00400000에 로드하면, hInstance 값은 0x00400000
- 실행 파일이 로드될 시작 주소는 링커에 의해 결정
- 마이크로소프트 링커의 경우 /BASE:address 옵션을 사용하여 시작 주소를 변경
- Visual Studio의 링커는 윈도우98에서 실행 파일을 로드할 수 있는 가장 하단의 메모리 주소가 0x0040000이었기 때문에 지금도 0x00400000을 기본 시작 주소로 사용
< 출처 : 제프리 리처의 Widows via C/C++ >
C/C++