读书人

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

发布时间: 2012-04-11 17:42:33 作者: rapoo

为什么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

读书人网 >C++

热点推荐