我们可以使用def文件导出序数。但是系统dll不使用def文件。仍然shell32.dll有569个序数导出,user32.dll有181个序数导出。
有没有办法在没有 def 文件的情况下导出序数?
最佳答案
每个导出的函数都有一个序数。链接器会自动对它们进行编号,从 1 开始。但是,如果您想控制精确值(就像 Microsoft 对这些 DLL 所做的那样),那么您必须使用 . def 文件。
仅当客户端代码之前使用序数时才需要,并且您需要与不会重建的旧代码的二进制兼容性,并且您添加或删除了导出函数。为了达到 99.99% 的准确度,客户端代码从不使用序数来链接导出的函数。他们总是使用这个名字。如果您在 .def 文件中导出带有 NONAME 属性的函数,则只会依赖于序数值,从而强制客户端代码改为使用序数。实际上,只有当您想要隐藏导出时才会这样做。
微软永远无法对此做出任何假设,并且在过去 23 年里被迫保持这些 DLL 的二进制兼容性。一个不属于我们的负担。
关于c++ - 导出序号而不带 def 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38429312/