c++ - 导出序号而不带 def 文件

标签 c++ c winapi shell32

我们可以使用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/

相关文章:

c++ - 将 std::string 的 xvalue 传递给采用 std::string_view 的函数

c++ - 如何在基数 256 中以其唯一的 xLen 数字表示形式写入整数 x?

java - 没有 OpenGL、DirectX、XNA 等的 3D 图形理论和代码

python - 如何在 python 中获取 Windows 用户的全名?

winapi - (Win32) 堆在进程之间共享

c++ - MPI如何从从节点接收动态数组?

c++ - 绑定(bind)绑定(bind)函数作为参数

我可以将 string 和 int 值压入堆栈吗?

c - getmaxyx 如何工作? (来自诅咒)

winapi - 寻找 WaitForInputIdle 函数的替代方案,随时可用