如何从DLL导出中删除下划线

时间:2015-01-21 20:44:52

标签: c++ c dll dllexport name-decoration

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

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

在原始DLL中,它们是_stdcall,但它们的名称最初没有下划线。

如果T指定.def文件中的名称,如“testfunc @ 4 = testfunc”,@后面的所有内容都将被删除。

如何在VS2013中指定我想要像“testfunc @ 4”这样的DLL导出?

1 个答案:

答案 0 :(得分: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 的源代码中。

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