导出无 def 文件的序数

Jun*_*mil 2 c c++ winapi shell32

我们可以使用def文件导出序数。但是系统dll不使用def文件。仍然shell32.dll有569个序数导出,user32.dll有181个序数导出。

有没有办法在没有def文件的情况下导出序数?

Han*_*ant 5

每个导出的函数都有一个序数。链接器会自动给它们编号,从 1 开始。但是如果您想控制确切的值(就像 Microsoft 对这些 DLL 所做的那样),那么您必须使用 .def 文件。

仅当客户端代码之前使用序数时才需要它,并且您需要与未重建的旧代码的二进制兼容性,并且您添加或删除了导出的函数。为了达到 99.99% 的准确度,客户端代码从不使用序数来链接导出的函数。他们总是使用这个名字。如果您在 .def 文件中使用 NONAME 属性导出函数,则您只会依赖于序号值,从而强制客户端代码改为使用序号。实际上,只有当您想隐藏导出时才会这样做。

Microsoft 永远无法对此做出任何假设,并且在过去 23 年中被迫保持这些 DLL 的二进制兼容。不属于我们的负担。

  • 顺便说一句,您还可以使用 #pragma comment(linker, "/export:...")` 来控制导出函数的序号。 (2认同)