使用def文件从可执行文件导出函数

时间:2016-11-15 18:17:04

标签: c++ linux windows dll executable

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

虽然我已经设法让这个工作,但似乎入口点存在一些问题:

  • 如果未明确设置,则默认为“main”中的错误 一个不起眼的子库。
  • 如果 显式设置,则其输入参数argc和argv被破坏(argc可以是~20000000或〜-700000)。

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

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

1 个答案:

答案 0 :(得分:1)

我发布这篇文章只是为了总结我自己的学习,没有更好的答案:

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

我希望这对尝试做类似事情的其他人有用。我很乐意重新指定一个更具技术性的答案作为"解决方案",如果出现......