반응형


GetProcAddress() - dll 함수 사용  API 

2008/03/12 10:54

복사http://blog.naver.com/silver6688/60048943503

FARPROC WINAPI GetProcAddress(
  HMODULE hModule
,
  LPCSTR lpProcName
);

솔직히 위에 명령어는 딱히 설명이 필요 없을 정도로 많이 사용하는 핵심 명령어임에 틀림없다.

 

그럼에도 불구하고 흥미로운 부분도 꽤나 숨어있는 녀석이다.

 

    HMODULE pTestDXLib;
    FARPROC pFunctionality;

    pTestDXLib=LoadLibrary("DSOUND");

    pFunctionality = GetProcAddress(pTestDXLib, (char*) 7);

 

 

위와 같이 Ordinary Number를 이용해서 원하는 함수를 호출할수도 있다.

 

typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);

HINSTANCE hDLL;               // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1;    // Function pointer


hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
   lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL, "DLLFunc1");

      FreeLibrary(hDLL);
      return SOME_ERROR_CODE;
   }
   else
   {
      // call the function
      uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
   }
}

일반적으로는 위에서 처럼 함수 이름으로 호출할 것이다.

 

 

또한 함수 이름뿐만 아니라 변수 이름을 적어서 익스포트된 변수 이름도 쉽게 구할수가 있다.

 

 

extern "C" _declspec(dllexport)
int k=50;//DLL이나 exe와 같은 실행 모듈에서 이렇게 해준다.

 

 

HINSTANCE hInst=GetModuleHandle(NULL);
int* p;
p=(int*)GetProcAddress(hInst,"k");

 

위에 경우는 바로 변수에서 읽어드리는 과정이다. 흥미롭지 않는가?

반응형

+ Recent posts