非常遗憾由于一些原因,我的截图已经已遗失。

为什么没有 Win32 版本?

因为该项目以前的代码是在 Mac 下开发的,制作 iOS 和安卓客户端的时候也都是在 Mac 下编译。所以之前的代码从立项到完成没有在 Windows 上编译过。

我们为什么需要 Win32 版本的客户端?

项目的制作有不同分辨率的屏幕适配,如:iPhone 5(16:9), iPhone 4(3:2), iPad(4:3)。为了能让测试容易在不同的分辨率看实际效果,在开发阶段同步测试,Win32 版本不可或缺。而且也可减少采购 Mac 设备。

搭建过程遇到的问题

编译时在输出里出现了大量的 error,不要着急,一个一个的解决它。解决问题的时候建议以从上到下的方式,按照编译的顺序解决编译问题。

第一大问题

如图所示;

找到代码位置

发现此函数明明在类中定义了,为什么识别成 “未定义标识符” 了呢。其实是由于代码文件的字符集与系统的字符集不同,注释用的中文造成的。要不注释用英文,要不在 // 后面空一格 。

写代码的时候要养成良好的习惯 // 注释要这么加 (// 后面要空一个空格,句末也空一格)。

下图的问题,跟上面的相同。

第二大问题

如图所示,出现大量的 “无法打开源文件”。

这是由于原工程修改了大量的 cocos2d 底层的代码,其中不需要的他删除了。但是他只在 Xcode 的项目中删除了没在 VS 项目中编译过,所以挨个在解决方案的 libcocos2d 里找到引用了已经删除的文件,点右键移除即可。

第三大问题

如图所示,其实问题已经在输出中描述的很具体了,就是两个函数没有在 FileUtilsWin32 里写,按照 iOS 上的和之前 Win32 上的其他函数仿照着加上就行了。

第四大问题

这种问题其实就是因为 Xcode 对目录不是那么敏感,只要把代码拖进去工程的就行了。但是 VS 对目录的引用还是比较严格的,所以改成 #include “base/CCDirector.h” 就可以了。

第五大问题

如图所示;

这是由于有部分的代码文件新添加的,但没引用到 VS 项目工程里,新建筛选器,添加一下就行了,如图。

第六大问题

这个问题折磨我搞了好几天。有大量得外部命令无法解析,如图所示;

发现这个问题的时候我先去工程的解决方案里各种找,看看输出里说的那些代码文件是否为添加进入,后来发现都添加了。那为什么还是报错呢。

明明引用了还是报错。我开始尝试了下面几种方法解决,第一种是把 libcoco2d 换成静态编译,把它编译成 .lib,但是出现了如图中的问题。

后来想把出现问题的 cocostudio, extension, ui 这些代码单独出来,单独做成三个独立的 lib,跟 libSpine 和 libbox2d 一样。但是编译的时候有出现的大量的问题,因为这三个部分的代码改动的地方比较多,编译出的问题各种各样,很不好解决。最后只能回头。

后来认真看代码发现这几部分写的类的头文件都没有这几个东西(如图)。后来谷歌查资料发现:对于 Win32,需要明白 __declspec(dllexport) 和 __declspec(dllimport) 的功能。__declspec(dllexport) 声明一个导出函数,是说这个函数要从本 dll 导出。我要给别人用。一般用于 dll 中省掉在 DEF 文件中手工定义导出哪些函数的一个方法。当然,如果你的 DLL 里全是 C++ 的类的话,你无法在 DEF 里指定导出的函数,只能用 __declspec(dllexport) 导出类。 所以在这三大块部分的所有代码的头文件按照格式添加如图的头文件和 dll 导出函数的宏定义。

还未解决的问题

最后关于 anySDK 和 Protocol 模块,由于之前的项目大量使用了 anySDK,JS 代码里也有大量的 anySDK,并且 anySDK 并没有为 win32 适配,所以这个地方很麻烦。有两个解决办法,一个是在 C++ 层关于 anySDK 的 JS 接口,都写个假个 win32,代码量不大,但需要很了解 anySDK 和 C++ 与 JS binding 的相关东西,技术含量比较高;第二个办法是 JS 代码里所以关于 anySDK 的都用 project.json 的配置和 if 去控制一下,这个办法技术含量不高,但非常非常繁琐,重复代码量很大。

好在最后新项目把原来的大部分 JS 代码都抛弃了,这块也不用再去做。