GetProcAddress 멈추는 현상
증상 : 64비트윈도우에서, GetProcAddress로 호출한 함수 오동작 및, 디버깅중 종료가 안되는 문제
작업관리자에서 강제종료도 안됨
원인 : GetProcAddress의 리턴값을 포인터로 다시 변환하여 발생.
멈추는 문제는 다른것이 원인인듯.
잘못된 코드
typedef BOOL(WINAPI *FUNC_RegisterTouchWindow)(HWND hwnd,ULONG ulFlags); BOOL RegisterTouchWindow(HWND hwnd,ULONG ulFlags) { BOOL ret=0;FUNC_RegisterTouchWindow *f;
f=(FUNC_RegisterTouchWindow*)User32_DLL_GetProcAddress("RegisterTouchWindow"); if(f) { ret=(*f)(hwnd,ulFlags); <<=== 여기서 바로 리턴됨. 에러. 종료안됨. 잘못된 호출 } else { printf(_T("ERR RegisterTouchWindow")); } return ret; } |
올바른 코드
typedef BOOL(WINAPI *FUNC_RegisterTouchWindow)(HWND hwnd,ULONG ulFlags); BOOL RegisterTouchWindow(HWND hwnd,ULONG ulFlags) { BOOL ret=0;FUNC_RegisterTouchWindow f;
f=(FUNC_RegisterTouchWindow)User32_DLL_GetProcAddress("RegisterTouchWindow"); if(f) { ret=f(hwnd,ulFlags); } else { printf(_T("ERR RegisterTouchWindow")); } return ret; } |
어쩌다 한번씩 GetProcAddress를 사용하다보니, 실수함.