为什么WSASetLastError会被设计出来?

为什么WSASetLastError会被设计出来?

作者:BlogUpdater |  时间:2023-04-06 |  浏览:1157 |  评论已关闭 条评论

如果你有 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)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

标签:

评论已关闭。