엔진 학습의 2 - 엔진 설계

1757 단어
1. 동적 및 정적 링크 라이브러리 만들기 lib
         HINSTANCE LoadLibrary(LPCTSTR pLibFileName)
         ZFXRenderer.cpp
         ZFXRenderer.h//만들기, 얻기, 놓기
         ZFXRenderDevice.h인터페이스 정의
링크된 라이브러리를 로드하고 해제하려면 다음과 같이 하십시오.
메모리에 불러오는 dll을 한 번만 불러올 수 있도록 하십시오. 만약 다른 응용 프로그램도 이 dll을 사용하고 있다면 메모리가 방법이 있는지 확인하십시오.
dll에 적용합니다.
잠재적인 문제가 하나 있다.dll 내부로 들어가서 실행할 때 출력 방법의 주소를 조회할 수 있습니다.
        FARPROC GetProcAddress(HMODULE hModule,LPCTSTR lpProName);
이 방법으로 dll 내부 방법의 주소를 얻어pointer에 저장할 수 있습니다 ( Create Render Device)
extern "C" {
   HRESULT CreateRenderDevice(HINSTANCE hDLL, ZFXRenderDevice **pInterface);
   typedef HRESULT (*CREATERENDERDEVICE)(HINSTANCE hDLL, ZFXRenderDevice **pInterface);
   
   HRESULT ReleaseRenderDevice(ZFXRenderDevice **pInterface);
   typedef HRESULT (*RELEASERENDERDEVICE)(ZFXRenderDevice **pInterface);
   }
/**
 * Create the dll objects. This functions loads the appropriate dll.
 */
HRESULT ZFXRenderer::CreateDevice(const char *chAPI) {
   char buffer[300];
   
   // decide which API should be used
   if (strcmp(chAPI, "Direct3D") == 0) {
      m_hDLL = LoadLibrary("ZFXD3D.dll");
      if(!m_hDLL) {
         MessageBox(NULL,
            "Loading ZFXD3D.dll from lib failed.",
            "ZFXEngine - error", MB_OK | MB_ICONERROR);
         return E_FAIL;
         }
      }
   else {
      _snprintf(buffer, 300, "API '%s' not yet supported.", chAPI);
      MessageBox(NULL, buffer, "ZFXEngine - error", MB_OK |
                 MB_ICONERROR);
      return E_FAIL;
      }

좋은 웹페이지 즐겨찾기