原文地址:devblogs.microsoft.com/oldnewthing…
原文作者:devblogs.microsoft.com/oldnewthing…
发布时间:2019年5月16日
好吧,也许你不记得了。在20世纪90年代末和2000年代初,它是一个东西,但它从来没有真正流行起来,它变得被其他短距离无线通信机制,如Wi-Fi和蓝牙所掩盖。
如果你偷看红外控制面板irprops.cpl里面,你会发现它输出了大量的蓝牙功能。蓝牙在红外控制面板里做什么?
倒带到2004年。Windows XP Service Pack 2正在开发中,其中一个正在添加的功能就是对蓝牙的支持。然而,当时的服务包规则不允许在系统中添加新的DLL。蓝牙人员不得不将他们的新API挤到现有的红外控制面板中。
后来取消了对系统引入新的二进制文件的限制,但为了兼容性,这些函数必须保留在irprops.cpl中。如今这些功能只是转发到真正的蓝牙DLL bthprops.cpl中实现。
十多年来,文档中一直劝告大家使用bthprops.lib而不是irprops.lib。
最后,Windows SDK拔掉了插头。它不再包含irprops.lib的副本,从而消除了与错误库链接的诱惑。如果你想调用那些蓝牙函数,就已经用bthprops.lib链接。
注意,如果你这样做,你的程序将无法在Windows XP Service Pack 2上运行,因为Windows XP Service Pack 2没有bthprops.cpl。对于那些正在开发软件以在Windows XP Service Pack 2上运行的人来说,希望你们都不要这样做(真的,你们是谁?),你可以从你的Windows XP SDK中复制irprops.lib并与之链接。
额外的唠叨。为什么不把irprops.lib作为bthprops.lib的复制品来发布呢?这样一来,人们就会默默地升级到正确的库。
当然,这将默默地把人们升级到正确的库,但这也意味着,如果你是那些希望没有人正在编写打算在Windows XP Service Pack 2上运行的代码,你的代码默默地坏了。你的程序曾经在Windows XP Service Pack 2上运行过,但现在已经不能用了,而且一路上没有任何警告或错误信息。
我们决定,最好把这个破绽弄得很明显。