我想替换一个我没有完整源代码(但有函数声明)的 DLL。应用程序在运行时加载这个 DLL 并调用 GetProcAddress
带有(所有)函数名称。 (所以我必须完全相同地命名函数)。
我创建了一个新的 DLL(在 MS VC2013 中)并编写了函数。但是我在正确导出它们时遇到了问题。
在原始 DLL 中,它们是用 _stdcall
定义的。但他们的名字不以下划线开头。
如果我像这样在 .def 文件中指定名称 testfunc@4=testfunc
@后面的所有东西都被删除了。
如何在 VS2013 中指定我想要一个 DLL 导出,如 testfunc@4
?
最佳答案
我认为最简单的方法是添加
// 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 地址。
关于c++ - 如何从 DLL 导出中删除下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28076475/