为什么C++生成的Dll函数名带有@?

BruceJiang 2012-02-25 05:52:33
为什么C++生成的Dll函数名带有@?如“_AvisynthPluginInit2@4”后面是数字2加@还有个4,都是这样的?

怎么调用呢?声明的函数又不能带有@? 请大侠赐教,多谢!
...全文
619 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wolf0403 2012-02-25
  • 打赏
  • 举报
回复
解释在这里。
http://en.wikipedia.org/wiki/Name_mangling#Standardised_name_mangling_in_C.2B.2B
RabbitLBJ 2012-02-25
  • 打赏
  • 举报
回复
那是编译器生成的名字,根据参数什么的不同来定义重载的不同版本名

c里面的函数就没有,直接是_funcname()
Lactoferrin 2012-02-25
  • 打赏
  • 举报
回复
那个是c风格的修饰名
c++代码中要这样extern"C"int __stdcall AvisynthPluginInit2(int);
JoeBlackzqq 2012-02-25
  • 打赏
  • 举报
回复
那是跟编译器有关的。因为C++允许重载,不改变下函数名的话,重载的函数名称都会是一样了。
taoyh2002 2012-02-25
  • 打赏
  • 举报
回复
_stdcall调用约定的函数会有@,后面的数字表示参数总共所占字节数,这是因为_stdcall函数需要被调用者清空堆栈,所以需要知道参数所占大小
_cedcl调用约定的函数没有@及后面的数字,因为_cedcl调用约定的函数由调用者清空堆栈
Lactoferrin 2012-02-25
  • 打赏
  • 举报
回复
修饰名
你这样声明就可调用
int __stdcall AvisynthPluginInit2(int);
Saleayas 2012-02-25
  • 打赏
  • 举报
回复
名字碾平。

65,183

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧