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