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