使用 def 文件从可执行文件中导出函数
Exporting functions from an executable using a def file
有很多关于如何从 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] 的温和令人沮丧的评论,我认为在这种情况下没有理由使用它。
我希望这对尝试做类似事情的其他人有所帮助。我很乐意将更技术性的答案重新指定为 "the solution",如果有人出现...
有很多关于如何从 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] 的温和令人沮丧的评论,我认为在这种情况下没有理由使用它。
我希望这对尝试做类似事情的其他人有所帮助。我很乐意将更技术性的答案重新指定为 "the solution",如果有人出现...