cegui0.71版确实做了很多改进,但是在下下来的dependency上,却出现了问题:应用程序正常初始化(0xc0150002)失败
查看windows的事件查看器,在“系统”下,可以看到SideBySide错误,报说找不到附属汇编Microsoft.VC80.DebugCRT,显然,这玩意肯定是装的,所以只可能是版本不对。
用resource hacker发现cegui需要 version="8.0.50727.4053" 的Microsoft.VC80.DebugCRT,在vc的安装目录下没有4053的版本,都是尾数762的,在windows/winsxs下也没有发现4053的版本。
上网多方求证,才发现原来是微软是又更新了visual studio sp1,出了一个名为Visual Studio 2005 Service Pack 1 ATL Security Update(http://www.microsoft.com/downloads/details.aspx?FamilyID=7c8729dc-06a2-4538-a90d-ff9464dc0197&displaylang=en),说是一个security update,7/28/2009, 很不幸的,显然CE更新了他的vs版本,所以他机器编的相关库也就被连接到那个4053的版本了。
期间我也做过几种尝试,修改dll的manifest的方式肯定是可行的,用resource hacker将其manifest中的关联项改为762就可以了,但是由于里面有几个共享库比如pcre,freetype被编译成了静态lib,导致每次编译ceguiBase_d.dll都需要修改其manifest,这显然不是解决之道。所以起码也得修改这写lib的dependency信息,用ue能打开这些lib,看到里面有一大堆的4053的dependency,很不幸的4053是4个字节来表示34 30 35 33, 而762是3个字节 37 36 32,结果修改后的dll就不能用了。等我想到是不是用00什么的来填充这个字节的时候,很不幸的,我的补丁已经打好了,而程序也确实可以运行了....
该问题的后遗症就是,开发这边没人还得装这个新的补丁,另外,最终用户发布时还需一起发布一个新版的vcredist_x86.exe,该版里包含了4053的运行时库。
借由这个问题,认识了微软很多dll啊,版本控制的问题,比如winSXS文件夹(用来解决dll hell问题),SideBySide错误(这玩意基本上就是dll装载错误,而官方统称为assembly--程序集,翻译过来就成了汇编没安装了...)总之用vc开发可真不是那么容易的