首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么C++生成的Dll函数名带有@?该如何解决

2012-04-11 
为什么C++生成的Dll函数名带有@?为什么C++生成的Dll函数名带有@?如“_AvisynthPluginInit2@4”后面是数字2加

为什么C++生成的Dll函数名带有@?
为什么C++生成的Dll函数名带有@?如“_AvisynthPluginInit2@4”后面是数字2加@还有个4,都是这样的?

怎么调用呢?声明的函数又不能带有@? 请大侠赐教,多谢!

[解决办法]
修饰名
你这样声明就可调用
int __stdcall AvisynthPluginInit2(int);
[解决办法]
_stdcall调用约定的函数会有@,后面的数字表示参数总共所占字节数,这是因为_stdcall函数需要被调用者清空堆栈,所以需要知道参数所占大小
_cedcl调用约定的函数没有@及后面的数字,因为_cedcl调用约定的函数由调用者清空堆栈
[解决办法]
那是跟编译器有关的。因为C++允许重载,不改变下函数名的话,重载的函数名称都会是一样了。
[解决办法]
那个是c风格的修饰名
c++代码中要这样extern"C"int __stdcall AvisynthPluginInit2(int);
[解决办法]
那是编译器生成的名字,根据参数什么的不同来定义重载的不同版本名 

c里面的函数就没有,直接是_funcname()
[解决办法]
解释在这里。
http://en.wikipedia.org/wiki/Name_mangling#Standardised_name_mangling_in_C.2B.2B

热点排行