总的来说用VS2010编译CEGUI_0.7.1跟用2008和2005编译步骤差不多,网上也有了不少教程,这里我简单描述一下:
1.去官网下载源码包和依赖库包
http://www.cegui.org.uk/
下载最新的0.7.1的就可以,依赖包下载vs2010的
2.把依赖包解压后的dependencies文件夹放在CEGUI-0.7.1目录下
3.进入CEGUI-0.7.1/projects/premake文件夹,运行built_vs2008.bat和build_samples_vs2008.bat
这里CE编写了一个专门的程序来生成对应版本的的sln。但是这里没有2010的,没关系,使用2008的转换一下就可以。
4.使用vs2010打开CEGUI.sln
按提示对话框转换成2010的sln。
5.修改源代码
这样直接编译的话会出现编译错误,描述如下:
1> CEGUIMultiColumnList.cpp
1>d:/program files/microsoft visual studio 10.0/vc/include/xmemory(205): error C2440: 'initializing' : cannot convert from 'int' to 'CEGUI::ListboxItem *'
1> Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
这里明显是模板参数不能推导,vs2010的STL在模板参数检查上更严格,CEGUI原来的代码使用0来作为空指针将无法推导成CEGUI::ListboxItem *类型。也就是以前传统的C++编程常用的以0(NULL宏)来代表空指针的方法将被vs2010的STL拒绝。而支持了c++0x标准的vc10则在语法上定义了一个关键字来代表空指针:nullptr。
那么解决方法是把CEGUIMultiColumnList.cpp的第702行由
d_grid[i].d_items.insert(d_grid[i].d_items.begin() + position, 0 );
改成
d_grid[i].d_items.insert(d_grid[i].d_items.begin() + position, nullptr );
在查阅MSDN后发现,nullptr是提供给托管和本地两种C++语言,而__nullptr仅仅提供给本地C++。在使用vs2010开发的时候,可以直接使用__nullptr关键字。
接下来可以编译debug和release的代码了。
6.编译sample
按照上面的步骤编译sample的sln即可。这里不需要修改代码。
运行示例如下图。