深度探索DxFramework 2-1
请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com
第2章 DxFramework的架构剖析 1 2.1 DxFramework的全局头文件 在开始着手分析DxFramework之前,我们有必要先弄懂DxFramework所定义的一些在其引擎代码内部中频繁使用的一些数据类型,宏,和全局函数。
众所周知,由于C++语言的灵活性和自由性;在不同的操作系统平台下,不同的编译器对同一关键字所指定的数据类型所占字节大小是不一致的——C++标准委员会对此也并没有做统一的要求。以int类型为例,C++标准委员会只是要求此类型的大小至少不小于16位。例如在Microsoft Win32平台下,Visual C++6编译器所实现的int是32位整形数据。而在DOS系统下,Borland C++ 3.1实现的int则只有16位。因此,为了代码的平台移植,或者是便于版本的数据类型升级和扩充,一般的大型软件系统都有其自定义的数据类型。以Microsoft定义的win32数据类型为例,就有诸如无符号双字类型,32位的DWORD;无符号单字类型,十六位的WORD;无符号的整形数据,UINT等等。DxFramework也不例外,它也有着它自身的预定义数据类型,它们定义在globals.h文件中,现在我们来逐个分析。代码如下:
//globals.h #define WIN32_LEAN_AND_MEAN #define DIRECTINPUT_VERSION 0x0800 //指定使用的DInput版本 /* 忽略编号为4786的编译器警告 当变量标识符名字过长(超过255个字符)的时候,调试器无法调试变量标 识符号超过255个字符长度的代码。无法在调试器中查看、计算、更新或监视被截断的符号。调试器在调试过程中 将会把变量标识符“截短”至255个字符。有时在嵌套声明的变量名中,会出现一串长的警告,在使用STL 的时候, 这种警告会经常出现,使用此指令可以关掉此警告 */ #pragma warning(disable: 4786) //用来进行内存侦测的起到开关作用的宏 #ifdef _DEBUG #define _CRTDBG_MAP_ALLOC //定义此宏,使得CRT内存泄漏侦测函数可用,此宏在crtdbg.h中定义 #define _INC_MALLOC #define enw DEBUG_NEW #endif //定义使用UNICODE的宏 #define UNICODE //如果宏UNCODE定义了,则把宏_UNICODE也定义 #ifdef UNICODE #define _UNICODE #endif #define USE_DOUBLE_FLOAT_PRECISION /* 如果定义了USE_DOUBLE_FLOAT_PRECISION宏 XVECTOR2定义为用双精度浮点数类型实例化模板类 类型的DVECTOR2替代为,XFLOAT定义为如果没有定义的话,就把XVECTOR2定义为单精度浮点数 实例化的模板类类型FVECTOR2,XFLOAT定义为floatFVECTOR2,DVECTOR2类型在vector2.h中定义, 稍后详述 */ #ifdef USE_DOUBLE_FLOAT_PRECISION #define XVECTOR2 DVECTOR2 #define XFLOAT double #else #define XVECTOR2 FVECTOR2 #define XFLOAT float #endif //预包含engine所要使用的系统头文件 #include <tchar.