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

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




       

你可能感兴趣的:(引擎学习之二---设计引擎)