+ -
当前位置:首页 → 问答吧 → sizeof 才是微软克敌制胜的法宝

sizeof 才是微软克敌制胜的法宝

时间:2010-06-30

来源:互联网

微软的函数很烦,很多参数都需要填一个struct,
很多的struct开头都是一个cbSize, 用来指定struct的大小。
于是不管windows怎么升级,都可以提供一致的API函数接口,
通过cbSize就可以判定出旧的版本。
这样就可以对旧的软件进行兼容。
微软不仅在为现在编程,更在为未来编程。
这种模式,恐怕linux一辈子也学不来。

在linux上,要么被迫升级,要么开源,商也软件会喜欢这种模式吗?

作者: 群雄逐鹿中原   发布时间: 2010-06-30

作者: lenovo   发布时间: 2010-06-30

这招确实很高,把类型元信息用在了API之中....

作者: xyfree   发布时间: 2010-06-30

这不是微软的经验,只是从DEC的VMS拿过来的。

作者: 没本   发布时间: 2010-06-30

我也早学到这招了

作者: hellioncu   发布时间: 2010-06-30



QUOTE:
微软的函数很烦,很多参数都需要填一个struct,
很多的struct开头都是一个cbSize, 用来指定struct的大小。
...
群雄逐鹿中原 发表于 2010-06-30 12:49


没明白,大侠能不能说详细一点?

作者: rain_fish   发布时间: 2010-06-30

举个实例,俺理解下

作者: 消失的地平線   发布时间: 2010-06-30

是啊!不是太明白啊!

作者: liexusong   发布时间: 2010-06-30

本帖最后由 xinglp 于 2010-06-30 13:47 编辑


QUOTE:
微软的函数很烦,很多参数都需要填一个struct,
很多的struct开头都是一个cbSize, 用来指定struct的大小。
...
群雄逐鹿中原 发表于 2010-06-30 12:49



你是说这样么?

DWORD SomeAPI(SomeStruct st)//Ver:2010
{

if(st.cbSize==OLD_SIZE){return SomeAPI_1998(st);}
}


靠这个方法保证原来平台上编译的软件在新的平台也能运行?

作者: xinglp   发布时间: 2010-06-30

貌似楼上所说 不解中。

但是不能完全解决问题

作者: benjiam   发布时间: 2010-06-30

作者: linuxlixk   发布时间: 2010-06-30

不懂

作者: 迷離   发布时间: 2010-06-30

Linux不是学不来,而是故意不这么做的

Linux内核及很多用户态程序不提供ABI兼容,只提供API兼容是为了提高二进制发布的难度,从而鼓励开源。

作者: koolcoy   发布时间: 2010-06-30



QUOTE:
Linux不是学不来,而是故意不这么做的

Linux内核及很多用户态程序不提供ABI兼容,只提供API兼容是为了提 ...
koolcoy 发表于 2010-06-30 15:11


这种做法也是有利有弊。也有很多人抱怨甚至抨击linux的ABI不兼容。

作者: donglongchao   发布时间: 2010-06-30

作者: huxk   发布时间: 2010-06-30

确实有很多这样的API

作者: chinesedragon   发布时间: 2010-06-30

作者: LunarBull   发布时间: 2010-06-30

一个sizeof都能用来夸夸微软....

作者: zhaohongjian000   发布时间: 2010-06-30