dx 9 project

반응형

dx10 공부를 살짝 해봤지만 굳이 시간을 투자해 가면서 dx10 까지 만들 필요가 있을까...
이전 엔진 버전에서는 만들었지만 시간이 너무 많이 투자되는듯...
이번에는 dx9을 위주로 만들고 필요하다면 dx10버전은 천천히 만들거나 dx11을 지원하는 카드를 꼽아서
dx11을 만들어야지 ㅎㅎㅎㅎ.


Explicit 링킹을 사용.
이 방식은 단순하게 dll을 이용하여 로드할 수 있는 방법.

1. HINSTANCE LoadLibrary(LPCTSTR lpLibFileName)
- 원하는 라이브러리를 로드한다.
   인자에는 원하는 dll명을 써주면 된다.
   LoadLibrary( "MgX9.dll" ) 이런 식으로 해 주면 HINSTANCE를 반환 해 준다.
   여기서 반환된 HINSTANCE는 파일의 핸들을 의미한다.
   이 파일의 핸들을 이용하면 필요한 함수의 포인터를 얻을 수 있다.
  
2. FARPROC GetProcAddress( HMODULE hModule, LPCSTR lpProcName );
- 원하는 함수의 포인터를 얻을 수 있다.
   LoadLibrary를 통해 얻은 파일의 핸들을 이용하여 해당 dll에 있는 함수의 포인터를 얻을 수 있다.
   GetProcAddress( dllHandle, "DllDx9" )
   이 방식을 쓰기 위해 빠트리면 안되는 중요한 한가지는 해당 연결하고자 하는 해당 프로젝트의 DLL을 만들때
   연결하고자 하는 함수의 extern을 정의해 주는 것이다.

http://jimbo73.egloos.com/1486292

3. 연결할 프로젝트( MgX9 )에 _USRDLL을 사용하여 전역으로 함수를 정의 한다
#ifdef _USRDLL
void* DllDx9(인자)
{
}
#endif

4. MgX9 프로젝트에 다른 프로젝트에서 dll을 통해 연결할 함수를 extern으로 설정해 준다.
#ifdef _USRDLL
extern "C" EXPORTDLL void* DllDx9(인자);
#endif

5. 마지막으로 GetProcAddress 함수를 통해 리턴받은 함수 포인터를 사용해 함수를 호출하면 된다.
returnFfuncPointer(인자);

6. FreeLibrary(HMODULE hModule);
종료시는 로드한 프로젝트의 핸들을 사용해 라이브러리를 해제해 준다.

이상, dll에서 함수 뽑아쓰는 방법이었슴.
현재 프로젝트에서 이 방식을 쓰고 있음.

'작업장 > Mgin 제작' 카테고리의 다른 글

AddRef() func  (2) 2011.05.13
하루를 잡아먹은 export unit error.  (0) 2011.04.29
warning C4275:  (0) 2011.03.18
min, max의 값.  (2) 2011.01.18
배치파일에 대한 이야기  (0) 2010.06.09
TAGS.

Comments