经过昨晚的反复思考,觉得不用stlport对不起自已,毕竟花了时间。而且以后也可能碰到同样的问题。于是早起就把clanLib用新的stl重新编绎了一次,出现了昨天的错误:
E:/Program Files/STLport/stlport/stl/_num_put.c(168) : error C2059: syntax error : ')'
E:/Program Files/STLport/stlport/stl/_num_put.c(450) : see reference to function template instantiation 'class _STL::ostreambuf_iterator<char,class _STL::char_traits<char> > __cdecl _STL::__copy_integer_and_fill(const char *,int,class _STL::
解决方法是:不使用SGI的IOSTREAM,即在stl_user_config.h中打开
# define _STLP_NO_OWN_IOSTREAMS 1 开关。
现在就可以编译通过了。
最后总结一下安装clanLib的过程,免得以后又要重来过:
1. 安装dx8sdk
2. 安装Microsoft Platform SDK
3. 下载编译stlport,我这里用的是STLport- 4.6.2 (当然,你不用stlport也是可以的)
4. 在stlport中的头文stl_user_config.h设置
# define _STLP_NO_OWN_IOSTREAMS 1
# define _STLP_NEW_PLATFORM_SDK 1
# define _STLP_USE_MFC 1 //要用MFC就选上吧,不过我也没怎么用MFC
5. 在VC6.0中把Platform SDK的include与lib的sdk目录设为最顶层
6.安装ExternalLibs,其中包含了一些clanLib用到的开源库,比如zlib, libpng。这些很多都是在LINUX下开发的,原来clanLib官方网站都统一把他们打包成win32的二进制开发包。现在似乎没得下载了。
7. 编译clanLib(我这里用的是clanLib 8.0.rc2 )其中会在clanLib的CL_GUI模块中碰到一个C2857 error, 解决方法就是在工程中的precompiled header选为not using precompiled headers,并且把precomp.cpp从工程文件中去除就可以了。
8. 在clanLib的例子中的大多工程都有 __STL_DEBUG 宏定义,把它去除。否则程序虽然能编译通过,却运行不了。因为stlport默认是没有设置调试的,而clanLib库的编译我想大家都应该是用默认的把。
对于使用clanLib的GUI模块来做的介面程序。会用到下面好几个类,并且他们的关系还挺复杂的:
首先,clanLib各大部分内置的xml资源数据可以在官方的帮助文档中找到
http://www.clanlib.org/docs/Overview/gui_resources.html
另外CL_Sprite的则可从API的帮助中找到
CL_Resource //资源数据,相当于xml中的数据单位
CL_ResourceManager //资源管理,相当于一个xml文件
CL_GUIManager //主介面,一个根组件
CL_ComponentManager //通过xml生成的gui对象,可以由它来管理
CL_StyleManager //GUI介面样式,有两个功能:一个是管理xml中定义的gui样式,另一个则是关连组件与外观(样式)的中介.
CL_Component //组件,真正产生事件的地方。
CL_ComponentStyle //组件外观,一般来说是通过外观与组件关连产生新的外观。而不是使用继承,这点同VC中的组件是不一样的。
(上面的样式与外观是同一个词)
CL_ResourceData //资源数据
CL_Button //组件,继承自CL_Component
它们之间的关系分两种:
资源数据:
CL_Resource 只是直接映射xml中的数据,从这里读出的数据都是字符串
CL_ResourceData 给出可以生成相应对象的结构体数据。比如CL_Surface。
CL_ResourceManager 保存了xml文件中的所有数据,如果数据是clanLib中本身都定义好的,而可以直接从CL_ResourceManager产生相应对相。
GUI数据:
GUI的资源定义是建立在CL_ResourceManager资源数据的读取上。当然,如果全是用它码写的话就不需要了。
CL_GUIManager、CL_ComponentStyle、CL_Component、CL_StyleManager
CL_ComponentManager 之前的关系。
首先clanLib中的GUI是由组件(CL_Component)构成的,但是同我们用的VC有点不一样的
地方是,它不能单独的工作。他的显视需要一个CL_ComponentStyle,而CL_ComponentStyle
会关连CL_Component相关的事件,以进行重绘等操作。而且每个CL_Component的构造函
数中会把自已组件的类型传递给CL_StyleManager。由CL_StyleManager再把他们两个进行
关连。这样,如果你想构造新组件。标准的方法,就至少要重写CL_StyleManager,以及
CL_ComponentStyle。
带有Manager的资源数据都需要CL_ResourceManager支持。其实原始数据在CL_ResourceManager中都有了,不过要转换为特定功能的数据。就要加上如CL_ComponentManager与及CL_ComponentStyle这样的壳。
总结:今天目标定得不明确,并且昨天残留的装机问题也没有完全解决 , 所以进度还是不满意。今天除了把开发环境完全搞定之外,就把今天看明白的部分记下来吧。整个介面程序按计划应该在 23 号完成。毕竟早点睡才有精神哪。