我想替换一个我没有完整源代码(但函数声明)的DLL。应用程序在运行时加载此DLL并使用(所有)函数名称调用GetProcAddress。 (所以我必须将功能命名完全相同)。
我创建了一个新的DLL(在MS VC2013中)并编写了这些函数。但是我在正确导出它们时遇到了问题。
在原始DLL中,它们是_stdcall,但它们的名称最初没有下划线。
如果T指定.def文件中的名称,如“testfunc @ 4 = testfunc”,@后面的所有内容都将被删除。
如何在VS2013中指定我想要像“testfunc @ 4”这样的DLL导出?
答案 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 地址。