我们可以使用def文件导出序号。但系统dll不使用def文件.Still shell32.dll有569个序号导出,user32.dll有181个序号导出。
有没有办法在没有def文件的情况下导出序号?
答案 0 :(得分:4)
每个导出的函数都有一个序数。链接器自动为它们编号,它从1开始。但是如果你想控制完全值(就像微软与这些DLL有关)那么你必须使用a。 def文件。
只有在客户端代码之前使用了序号时,和才需要二进制兼容旧代码并不能重建,和你添加或删除导出的功能。准确率在99.99%以内,客户端代码从不使用序数来链接导出的函数。他们总是使用这个名字。如果在.def文件中导出具有NONAME属性的函数,则只会依赖于序数值,从而强制客户端代码使用序号。实际上,只有当你想隐藏出口时才会这样做。
微软永远不会对此作出任何假设,并且在过去的23年中被迫保持这些DLL二进制兼容。负担不是我们的负担。