一般都是系统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整张纹理。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有