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

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




       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值