4

我想替换一个我没有完整源代码(但函数声明)的 DLL。应用程序在运行时加载此 DLL 并GetProcAddress使用(所有)函数名称进行调用。(所以我必须将函数命名为完全相同)。

我创建了一个新的 DLL(在 MS VC2013 中)并编写了函数。但是我在正确导出它们时遇到问题。

在原始 DLL 中,它们被定义,_stdcall但它们的名称不以下划线开头。

如果我像这样在 .def 文件中指定名称,testfunc@4=testfunc则 @ 后面的所有内容都将被删除。

如何在 VS2013 中指定我想要一个 DLL 导出,例如testfunc@4

4

1 回答 1

0

我认为最简单的方法是添加

// in cpp, but will probably work in header too
#pragma comment(linker, "/export:FunctionName@4=_FunctionName@4")

// in header
extern "C" __declspec(dllexport) void __stdcall FunctionName(int param);

在 DLL 的源代码中。

我从这里得到了这个想法。他们还解释了如何使用 DEF 文件进行操作。我猜是口味问题。您最终将在导出表中获得相同功能的两个条目,但应用程序应该能够获得正确的 proc 地址。

于 2021-05-19T15:55:35.383 回答