为什么WSASetLastError会被设计出来?
如果你有 Win32 开发,尤其是网络部分的开发经历,则你可以会注意到这样一个事实:我们有一个 API 用来设置操作执行后的错误代码,它叫 SetLastError,然而,还有另一个看起来差不多的API WSASetLastError。这就有点让人摸不着头脑:为什么要设计两个类似的API?这不是多余吗?
如果你坐下来好好思考一下人生,你可能已经知道答案了。
Winsock 库在最初被开发出来的时候,是需要运行在 16 位和 32 位操作系统上面的。你可以看看经典的 Winsock 函数如何基于异步通知的窗口消息。在 16 位 Windows 的世界里,并没有 SetLastError 这个API。因此,Winsock 必须为 16 位实现提供自己的版本。所以,它添加了自己的前缀 WSA。
由于维持源代码兼容性很重要,因此也有32位版本。当然,如果你不知道这段 16 位版本的历史,回想起来,32 位版本看起来会有点愚蠢。
总结
当我们发布软件的时候,一旦代码正式和客户见面了,它就会像刻在石头上的画一样不能再改变了,我们唯一能做的,就是在原有的代码基础上创立新的代码,就这样一层叠一层,直到天际。
我们常说到的兼容性,不是请个客,吃个饭就有的,而是开发者日日夜夜垒出来的。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Why does the function WSASetLastError exist?》
最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

相关推荐
- IContextMenu第二部分:显示上下文菜单
- Posted on 11月01日
- 错误信息:VS2010 Profiler导致Win7重启
- Posted on 07月07日
- 脚本学习:%cd%和%~dp0的区别
- Posted on 04月14日
- 第 4 期:Windows 11 的邮件和日历应用逐渐退出历史舞台
- Posted on 04月30日



评论已关闭。