Visual c++ 如何使用.DEF文件擦除stdcall'_';装饰

Visual c++ 如何使用.DEF文件擦除stdcall'_';装饰,visual-c++,dll,linker,Visual C++,Dll,Linker,我在Visual Studio Express 2012中有一个x86 DLL项目,它导出了许多\uu stdcall函数。在x86中,MS链接器使用下划线前缀和后缀标记每个函数名,后缀由@-符号和数字组成,数字指示函数返回时从堆栈中弹出的参数字节数 < >我的函数声明是用C(OK,C++)用外“C”编写的,并且这些映射被映射到导出的符号名称,如:S/< \u declspec(dllexport)int32\u t\u stdcall f()→ _f@0 \u declspec(dllexp

我在Visual Studio Express 2012中有一个x86 DLL项目,它导出了许多
\uu stdcall
函数。在x86中,MS链接器使用下划线前缀和后缀标记每个函数名,后缀由
@
-符号和数字组成,数字指示函数返回时从堆栈中弹出的参数字节数

< >我的函数声明是用C(OK,C++)用<代码>外“C”<代码>编写的,并且这些映射被映射到导出的符号名称,如:S/<
  • \u declspec(dllexport)int32\u t\u stdcall f()
    → <代码>_f@0
  • \u declspec(dllexport)void\u stdcall g(int64\u t)
    → <代码>_g@8
我需要去掉这个装饰,所以我只导出
f
g
,等等

本主题已经有问题,答案解释了通过
/DEF
开关传递给链接器的内容

因此,我创建了一个.DEF文件,如下所示:

EXPORTS
    _f@0  = f
    _g@8  = g
    ...
这是工作,但只是部分!特别是,导出的名称已从
_f@0
→ <代码>\u f,
_g@8
→ <代码>等等。因此,@#装饰已经消失,但主要下划线仍然存在


如何去掉前导下划线

如果是倒过来的,应该是f=_f@0I我很尴尬,但也很高兴!“这解决了问题,所以非常感谢您的评论,@Hans Passant。您甚至不需要
=_f@0
零件。链接器将从
f
中找出答案。谢谢@RaymondChen。。。如果我记得的话,我会去掉多余的RHS。