티스토리 뷰
GetModuleHandle() 함수는 WIndows의 API로 지정된 모듈을 검색해 반환하는 함수다(모듈의 엔트리 포인트를 반환 - C나 C++에서 main() 또는 WinMain() 함수). Windows에서 모듈이란 실행 파일(.exe) 또는 호출 프로세스의 메모리에 로드된 동적 링크 라이브러리(.dll) 파일을 말한다(쉽게 얘기하면 함수들의 집합 또는 특정 태스크를 처리하기 위한 객). 이 함수는 모듈이 이미 로드돼 있어 메모리에 다시 로드할 필요가 없을 때 작업 수행 시 유용하다. 이 함수는 Windows API의 이부로 Windows 운영 체제에만 해당된다. 크로스 플랫폼 애플리케이션을 개발하는 경우 운영 체제별 세부 사항을 추상화하는 조건부 컴파일 또는 크로스 플랫폼 프레임워크를 사용해야한다.
HMODULE GetModuleHandle(
LPCSTR lpModuleName
);
- lpModuleName
: 핸들이 필요한 모듈 (실행 파일 또는 DLL)의 이름. 이 매개 변수가 NULL인 경우 GetModuleHandle은 호출 프로세스(.exe 파일)를 만드는 데 사용된 파일에 대한 핸들을 반환한다. 대소문자는 구분하지 않는다. - 반환 값
: 함수가 성공적으로 실행되면 반환 값은 지정된 모듈의 핸들이지만 실패 시 NULL이 반환된다. 자세한 에러 정보를 얻으려면 GetLastError() 함수를 호출하면 된다.
아래는 사용시 기억해야할 사항이다.
- GetModuleHandle()은 모듈의 참조 수를 증가시키지 않는다. LoadLibrary() 와 달리 GetModuleHandle() 은 참조 수에 영향을 주지 않는다. 즉, LoadLibrary() 를 명시적으로 직접 호출하지 않는 한 모듈을 사용하는 동안 다른 스레드에서 모듈을 언로드할 수 있다.
- 호출 프로세스(calling process)의 메모리에 이미 로드된 모듈 내의 리소스나 함수에 액세스하는 데 사용된다. 다양한 모듈의 기능이나 데이터를 동적으로 쿼리해야 하는 플로그인 시스템이나 모듈식 애플리케이션에 특히 유용하다.
- DLL로 작업할 때 DLL 자체에 대한 핸들을 가져와야 하는 경우(예: DLL 내에 정의된 리소스나 함수의 주소를 검색하기 위해) DLL 컨텍스트에서 매개 변수로 NULL을 사용하여 GetModuleHandle() 을 호출해 자체 핸들을 가져올 수 있다.
다음은 사실상 모든 Windows 프로세스에 항상 로드되는 모듈인 kernel32.dll 모듈의 핸들을 검새갛기 위해 GetModuleHandle() 을 사용하는 간단한 예제다.
#include <windows.h>
#include <iostream>
int main() {
HMODULE hModule = GetModuleHandle(TEXT("kernel32.dll"));
if (hModule != NULL) {
std::cout << "Handle for kernel32.dll: " << hModule << std::endl;
} else {
std::cout << "Failed to get handle for kernel32.dll" << std::endl;
}
return 0;
}
참고
반응형
'기술(Tech, IT) > C++' 카테고리의 다른 글
[C++] DialogBox() 함수 (0) | 2024.03.22 |
---|---|
[C++] CreateDialog() 함수 (1) | 2024.03.20 |
[Tech, C++] 공통 프로젝트에 대한 솔루션 별 전처리기 정의 (0) | 2024.03.17 |
[Tech, C++] VK_CONTROL (0) | 2024.03.06 |
[Tech, C++] Accelerator Key (액셀러레이터 키) - Windows (2) | 2024.03.05 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Computer Graphics
- Hash Map
- 이코노미스트 에스프레소
- C++
- I2C
- DICTIONARY
- 오블완
- 파이썬
- tf-idf
- socket programming
- 이코노미스트
- 머신 러닝
- 안드로이드
- defaultdict
- leetcode
- 딕셔너리
- The Economist Espresso
- 리트코드
- machine learning
- Python
- Android
- ml
- vertex shader
- min heap
- 티스토리챌린지
- join
- 투 포인터
- 소켓 프로그래밍
- The Economist
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함
반응형