모듈(Module)
함수들의 집합, 특정 일을 처리한다는 객체 개념으로 해설할 수도 있다. 윈도우 내에서는 구체적인 예로 DLL이나 EXE 파일이 있다.

HMODULE GetModuleHandle(LPCTSTR lpModuleName);

lpModuleName에 DLL이나 EXE 파일 이름을 넘겨주면 모듈에 대한 핸들(HMODULE)을 리턴한다고 되어 있지만 실제 리턴 값은 베이스 주소 값을 넘겨준다, 결국 GetModuleHandle은 DLL과 EXE의 베이스 주소를 리턴하는 함수이다.

HINSTANCE LoadLibrary(LPCTSTR lpLibFileName);

 테스트

#include <Windows.h>
#include <stdio.h>

void main()
{
    HMODULE hMod;
    hMod = GetModuleHandle(NULL);
    printf("%p",hMod);
}



같 은점 :
LoadLibrary도 GetModuleHandle과 같은 기능(모듈에 대한 핸들을 리턴한다)을 한다.
(HMODULE과 HINSTANCE의 차이점 참고)

차 이점 :
LoadLibrary의 경우 레퍼런스 카운트를 올리지만 GetModuleHandle의 경우 레퍼런스 카운트를 올리지 않는다. 
따라서 경우에 따라 원하는 모듈이 자신의 메모리에 올라와 있지 않으면 NULL을 반환할 수 있다.
단순히 값만 참조할 때면 GetModuleHandle을, 실제 지속적으로 사용하기 위해서는 LoadLibrary를 사용할 것이다.

'windows' 카테고리의 다른 글

PIMAGE_IMPORT_DESCRIPTOR  (0) 2010.05.24
WinNT.h  (0) 2010.05.24
Toolhelp32를 이용한 프로세스ID얻기  (0) 2009.10.02
context switch  (0) 2009.10.01
세그먼트 레지스터  (0) 2009.10.01
Posted by applicationlayer
: