XYY Game Engine 封装和使用

c++封装

将c++项目封装为一个动态链接库,向外只提供接口,这样不仅仅方便发行,更可以加快成程序运行的速度。将XYY项目封装的步骤如下:

  1. 将所有的声明定义为导出,以类作为示范。

即将

1
2
3
4
5
6
7
class XYY_GlobalDriver : public XYY_Driver
{
public:
int tag;
void init(); // 初始化
void run(XYY_SceneContent * sc); // 运行
};

更改为

1
2
3
4
5
6
7
class __declspec(dllexport) XYY_GlobalDriver : public XYY_Driver
{
public:
int tag;
void init(); // 初始化
void run(XYY_SceneContent * sc); // 运行
};
  1. 删除main函数,并写以下两个文件
1
2
3
4
5
//XYY_Game_Engine.h
#ifndef XYY_Game_Engine_H
#define XYY_Game_Engine_H
extern "C" _declspec(dllexport) void start();
#endif
1
2
3
4
5
6
7
//XYY_Game_Engine.cpp
#include <XYY_Game_Engine.h>
extern "C" _declspec(dllexport)void start()
{
;
}

  1. 更改解决方案类型为dll

dll

  1. 将此处改为自己想要的

dll

  1. 生成解决方案

  2. 在解决方案目录中即可找到

dll

  1. 将项目的cpp文件删除,即将所有的实现删除只留下声明的接口,将刚刚插入的所有 __declspec(dllexport) 删除

  2. 打包发布。

动态链接库的使用

  1. 添加库目录和头文件目录以及添加对lib文件的依赖。

dll
dll
添加对lib文件的依赖也可以使用这样的预处理指令:

1
#pragma comment(lib,"XYY_Game_Engine.lib")
  1. 将dll文件放在项目的根目录下,或者放在和项目的解决方案exe的同目录。

  2. 示例,发现加载速度极快,因为所有的文件都是编译过的,但我不明白为什么加载也会加快。

dll

构建DLL项目规范

项目结构

  1. 首先必须将声明和实现相分离。

  2. 项目在实现的时候就将code目录加入到包含目录中,即可以使用 #include <file.h> 自包

  3. 将所有使用到的代码全部放在code目录下,包括GLSL等,这样项目构建和项目使用就没有差别了。用户只需要将提供的code文件夹加入包含目录即可,当然,code文件夹是随意的,即为项目根目录也可。

  4. 提供项目本身代码 include 文件夹以及项目依赖dependence文件夹,用户需要把这两个文件夹放入包含目录中.

  5. 使用以下两种方法避免重复包含。推荐使用后一种。

1
#pragma once 

或者

1
2
3
4
5
//XYY_Game_Engine.h
#ifndef XYY_Game_Engine_H
#define XYY_Game_Engine_H
//code
#endif
  1. 写好注释