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

标签 c++ c dll dllexport name-decoration

我想替换一个我没有完整源代码(但有函数声明)的 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/

相关文章:

C++/boost : Undefined Symbols in example?

c++ - 四元数旋转opengl

c - OpenGL 在使用使用它制作的 dll 时给出异常

dll - 如何做加载/库

delphi - 我可以在不使用(libeay32.dll 和 ssleay32.dll)文件的情况下使用 HTTPS 连接吗?

c++ - 在方法声明中使用 typedef 但在方法定义中使用规范类型是否合法 C++?

c++ - 为什么 std::ranges::views::take 使用模板类型来实现差异?

c - 尝试包含头文件时出现语法错误

c - 在内核中添加中断服务例程

.net - 在 VBScript 中访问自定义 .NET DLL