다음과 같은 함수를 포인터로 받어오기 위해서
unsigned long __stdcall some_function (IN HANDLE, IN unsigned int, OUT PVOID, IN ULONG, OUT PULONG);
다음과 같이 선언된 함수포인터를 사용하는 방법은
unsigned long ( __stdcall *pFnSome_func )(IN HANDLE, IN unsigned int, OUT PVOID, IN ULONG, OUT PULONG);
불편할 수있다.
대신
다음과 같이 선언할 경우
typedef unsigned long (__stdcall *pfnNtQueryInformationProcess)(IN HANDLE, IN unsigned int, OUT PVOID, IN ULONG, OUT PULONG);
다음이 일종의 '타입'이 된다. 물론 위에서 선언한 함수포인터의 타입이다.
pfnNtQueryInformationProcess
예를 들어 다음과 같은 부분에서 사용예를 확인할 수있다.
pfnNtQueryInformationProcess NtQueryInfoProcess =NULL;
.... //중간 생략
NtQueryInfoProcess = (pfnNtQueryInformationProcess) GetProcAddress(hNtDll, "NtQueryInformationProcess");
//pfnNtQueryInformationProcess 타입으로 타입 캐스팅하고 있음
마치 변수로 취급하는 기분이 들지 않는가?
'Application-level프로그래밍' 카테고리의 다른 글
(C)정적 2차원 배열 전달 (0) | 2009.07.22 |
---|---|
(C++)template 사용주의점 (naver 지식IN) (0) | 2009.07.08 |
(C) 함수포인터 캐스팅 (0) | 2009.05.31 |
(C) 열거형 (0) | 2009.05.31 |
(C)비트필드 구조체 (0) | 2009.05.31 |