注意许多开发人员常常通过为函数赋予一个序号值来输出D L L函数。对于那些来自1 6位Wi n d o w s环境的函数来说,情况尤其是如此。但是, M i c r o s o f t并没有公布系统D L L的序号值。当你的可执行模块或D L L模块链接到任何一个Wi n d o w s函数时,M i c r o s o f t要求你使用符号的名字进行链接。如果你按照序号进行链接,那么你的应用程序有可能无法在其他Wi n d o w s平台或将来的Wi n d o w s平台上运行。
实际上,我就遇到过这样的情况。我曾经发布了一个示例应用程序,它使用Microsoft System Journal中的序号。我的应用程序在Windows NT 3.1上运行得很好,但是当Windows NT 3.5推出时,我的应用程序就无法正确地运行。为了解决这个问题,我不得不用函数名代替序号。现在该应用程序既能够在Windows NT 3.1上运行,而且能够在所有更新的版本上运行。
我问过M i c r o s o f t公司,为什么它不使用序号,我得到的回答是:“我们认为可移植的可执行文件格式不仅具有序号的优点(查找迅速),而且提供了按名字输入的灵活性。我们可以随时增加函数。在带有多个实现代码的大型程序项目中,序号很难管理。”
你可以将序号用于你创建的任何D L L,并且按照序号将你的可执行文件链接到这些D L L。M i c r o s o f t保证,即使在将来的操作系统版本中,这个方法也是可行的。但是我在我的工作中总是避免使用序号,并且从现在起只按名字进行链接。