c++ - 使用 def 文件从可执行文件中导出函数

标签 c++ linux windows dll executable

有很多关于如何从 dll 导出函数的信息(我做过很多次),但我听说也可以从可执行文件导出函数,所以外部 dll 可以调用它们。

虽然我已经设法让它工作了,但似乎入口点有问题:

  • 如果未明确设置,则默认为错误的“main” 一个不起眼的子图书馆。
  • 如果它明确设置,那么它的输入参数 argc 和 argv 会被破坏(argc 可以是 ~20000000 或 ~-700000)。

我在查找有关从可执行文件导出函数的任何文档时遇到问题 - 我应该接受提示而不是这样做吗?

[上下文:这是使我们的流程在 Windows 和 Linux 上都能运行的努力的一部分。 Linux 版本意外地从可执行文件中获取函数,而不是从附属 dll 中显式导出的函数(函数具有相同的名称,但参数不同)。我们决定尝试使用它运行,并从 Windows 上的可执行文件中导出函数。]

最佳答案

我发布这个只是为了总结我自己在这方面的学习,没有更好的答案:

  • 添加 def 文件后,链接器立即提示无法确定入口点。正是出于这个原因,我添加了/ENTRY 引用。然而,在返工期间,我在删除 def 文件的同时删除了/ENTRY,并且我可以无错误地编译 - 我一定同时删除了一个微妙的冲突选项。
  • def 文件确实成功地从 .exe 导出函数,然后这些可以用于该进程的 dll(如果它链接到 DelayImp.lib和可执行文件的 .lib)。
  • 我从来没有能够让/ENTRY 选项令人满意地工作,并且结合了对 MSDN 项目 [ https://msdn.microsoft.com/en-us/library/f9t8842e.aspx] 的温和令人沮丧的评论。 ,我认为在这种情况下没有理由使用它。

我希望这对任何试图做类似事情的人都有用。我很乐意将一个更具技术性的答案重新指定为“解决方案”,如果出现...

关于c++ - 使用 def 文件从可执行文件中导出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40616940/

相关文章:

c++ - 从 QGraphicsView 上的数据文件中绘制点

C++ 等同于 Python 的 doctests?

linux - 是否可以在不访问库本身的情况下链接到共享库?

windows - 运行Go文件困难

在 Wamp 窗口上具有类似 cron 功能的 php 脚本

c++ - 有没有人知道上下文切换 - 通过 FSYNC 与 syslog-ng 从应用程序记录到磁盘

c++ - 如何让QTableView在没有聚焦的情况下自动更新内容?

linux - torch 测试.sh,/usr/bin/lua : module 'paths' not found

linux - 将 Meteor 作为守护进程运行

c - 如何使用 MinGW 在命令行上编译 C 程序?