引擎学习之二---设计引擎

来源:互联网 发布:烂泥情人知乎 编辑:程序博客网 时间:2024/04/30 05:15

   1、创建动态和静态链接库 lib

         HINSTANCE LoadLibrary(LPCTSTR pLibFileName)

         ZFXRenderer.cpp

         ZFXRenderer.h   // 创建,得到,释放

         ZFXRenderDevice.h    用于定义接口

    加载和释放链接库:

       确保加载到内存中的dll只加载一次,如果另一个应用也在使用这个dll,确保内存有方法使

应用进入到dll。

        有一个潜在的问题。可以通过它进入到dll内部,在运行时候查询输出方法的地址。

        FARPROC GetProcAddress(HMODULE hModule,LPCTSTR lpProName);

        通过这个方法可以得到dll内部方法的地址并且存这个地址到pointer (_CreateRenderDevice)

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;      }