一般都是系统API的行为改变了造成的。不同版本的win,API的实现可能完全不同。如果没测试好兼容性,就可能出现程序的兼容问题。而且,大部分时候其实是app的问题。
举几个我遇到的例子。
1. 某国产著名下载软件,一开始在vista上只要一选择下载目录就crash。结果是SHBrowseForFolder的参数结构体中的某个变量没有清零。xp不管这个,vista+开始用这个变量,结果就crash了。加上ZeroMemory解决。
2. 我的引擎KlayGE,几个月前发现在Win10上鼠标输入不正常,无法响应按键释放。后来发现原先WM_INPUT里的设备句柄总是等于枚举时候的句柄,Win10+变成另一个句柄值。MSDN上确实也是那么说的,以前能用只是运气好。照着改后恢复正常。
3. Quake 2,一开始在xp上运行不正常。原来代码里判断os版本号的时候,只考虑了95/98/2k等。把==改成>=后恢复正常。
4. 解谜游戏《不可思议的机器》,在xp上有一关用官方答案也过不去。原因在与xp上计时器精度提升到1ms,而不是95/98的16ms。而游戏是照着16ms调的时序,就不行了。
更惨的情况可能是有些app的bug,但因为app实在太流行,它们即便改了用户也不一定会更新。这时候只能把系统改成顺应那个bug。一个典型的例子就是DivX Player。它在调用DX的时候lock了纹理的一小部分,却写入了整张纹理。结果知道现在,DX runtime的代码里仍然有判断DivX Player的代码,如果遇到是它就总是lock整张纹理。
今天巴拿马的表现有点像王者荣耀里的程咬金:一个字干
孙子兵法曰:先不败而后求胜。像墨西哥很聪明,不跟你硬刚,我对后防有信心我就拖着和你打防守反击,只要你打不穿我我就不会输,几脚远射威胁也不大,让我抓住你后场漏洞我还有可能赢,这也是以弱胜强的常见措施。
但是巴拿马不干,就是喜欢跟你刚,防守反击是什么?不存在的。然而双方进攻效率是不一样的,显然这种对攻并不理智。不仅如此,巴拿马在对抗上也经常出现上头的动作,吃了5张黄牌,给下一场留下了巨大隐患。
踢足球也要靠脑子,不明智的战术布置加上技不如人,结果显而易见。但是巴拿马作为一直新进入世界杯的球队,为我们带来了一场并不乏味的比赛,他们敢打敢拼的精神也是值得鼓励的,期待他们更精彩的表现。要是国足能这样表现出对胜利的渴望,输了咱也不丢人啊。