870920 Menu

VS 2015编译老项目所遇到的三个问题的解决方案

近期将PC机升级为Windows 10,该平台下的IDE升级到VS 2015社区版,编译VS 2012的老项目时出现三个问题:一是C4458警告(声明隐藏了基类成员);二是项目中如使用了第三方静态库(比如cURL),则编译失败;三是使用JUCE类库开发的GUI程序,其界面文字随机性发生变化(比如变细,某些字符和数字显示错误)。解决办法如下:

1. 解决C4458警告很简单,只需将出现警告的变量或对象重命名即可。这些对象基本全部出现在函数作用域内。或者把基类数据成员中的对象或变量重命名(不推荐)。出现这种警告本来是好事,防止派生类无法调用或直接覆盖了基类的某些方法和非private的成员。对C++程序员来说,零警告和零错误总是项目编译的最基本要求,但还是感觉VS 2015有点多此一举,大惊小怪了。微软官方的开发社区曾有人提出了此问题,但微软员工也没给出个所以然……

2. IDE版本升级后,编译老版本项目会出现各种奇葩情况,这个很常见。OSX下的Xcode就经常玩这一手,不过通常解决起来并不麻烦;Windows次之,但是一旦出现就很让人头大;Linux下最罕见,但一旦出现也最容易解决(sudo更新库就是一击必杀的秘籍之一)。最近,我将Windows下的IDE升级为VS 2015后,就遇到了老项目无法编译的情况。问题出在cURL静态库上。不做任何改动,VS 2012编译却很顺利。郁闷了一会,按Linux下解决此类问题的惯例,花了点时间用VS 2015重新配置并编译cURL静态库,再次编译该项目,OK了。这操蛋的微软VS……

3. Windows 10升级后,感觉有进步,特别是界面文字渲染方面,但进步还是太小,太保守了。老掉牙的hint技术和不伦不类的ClearType依然在勉力支撑……这方面,比起OSX和Linux,Windows简直就是一坨shit,即便到了Windows 10,界面文字渲染基本还是老样子(除了微软强制塞给用户的一些新开发的内置程序),多了一个全局缩放的调节项,但是一大批不合格的老程序基本就没法看了,糊成N坨shit…更让人惊诧的是:全局放大后,某些JUCE程序在Windows 10平台下的界面文字莫名其妙会出现变细、字符和数字错误等问题。解决方法:Projucer中,底层图形渲染模块禁用微软的DirectWrite。

本次升级PC机的操作系统和IDE,也不全是失望和烦恼。比如:微软的IDE依然很好用,VS 2015简直好用到了令人发指的地步。再看看可怜的Xcode,真是货比货得扔。

另外,近期开始试用VS Code,这个玩意不错,OSX下跑得也挺畅快。对比之下,我觉得比GitHub的Atom好用。禁不住想,巨无霸VS也能弄个Linux和OSX版就好了。谁说没可能呢?你看MS Office系列都有OSX版了……