社区
C++ 语言
帖子详情
为什么C++生成的Dll函数名带有@?
BruceJiang
2012-02-25 05:52:33
为什么C++生成的Dll函数名带有@?如“_AvisynthPluginInit2@4”后面是数字2加@还有个4,都是这样的?
怎么调用呢?声明的函数又不能带有@? 请大侠赐教,多谢!
...全文
619
7
打赏
收藏
为什么C++生成的Dll函数名带有@?
为什么C++生成的Dll函数名带有@?如“_AvisynthPluginInit2@4”后面是数字2加@还有个4,都是这样的? 怎么调用呢?声明的函数又不能带有@? 请大侠赐教,多谢!
复制链接
扫一扫
分享
转发到动态
举报
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
打赏
举报
回复
名字碾平。
DLL
函数
接口:使导出的
函数
接口,同时以“
函数
名
”和“_
函数
名
@数字”的形式出现
我主要想说,怎么让编译的
DLL
产生“
函数
名
”和“_
函数
名
@数字”这两种接口
函数
,然而这两种接口
函数
在内存中指向同一个地址。例如,
DLL
的导出
函数
可以为“add”和“_add@8”,然而代码中
函数
原型为“void add (int, int);”。
函数
接口
生成
“add”好理解,但是同时又产生“_add@8”,而且两个接口都是由同一个
函数
生成
。 揭秘:因为代码中以这么一行“#pragma comme...
dll
导出
函数
符号含义
DLL
中导出类成员
函数
名
称修饰意思解释大全 2、
C++
编译时
函数
(非类成员
函数
)
名
称修饰 当
函数
使用__cdecl调用约定时,编译器进行以下工作: 1.以?标识
函数
名
的开始,后跟
函数
名
; 2.
函数
名
后面以@@YA标识开始,后跟返回值和参数表; 3.当
函数
的返回值或者参数与
C++
类无关的时候,返回值和参数表以下列代号表示: B:const
dll
导出
函数
名
的那些事
经常使用VC6的Dependency查看
DLL
导出
函数
的
名
字,会发现有
DLL
导出
函数
的
名
字有时大不相同,导致不同的原因大多是和编译
DLL
时候指定
DLL
导出
函数
的界定符有关系。 V
C++
支持两种语言:即C/
C++
,这也是造成
DLL
导出
函数
差异的根源 我们用VS2008新建个
DLL
工程,工程
名
为"Test
DLL
" 把默认的源文件后缀 .CPP改为.C(C文件) 输入测试代码如下: 01 in
Windows Qt 编译
c++
DLL
时,取消导出符号的 @ 标识
在编译
带有
__stdcall 调用约定的
C++
dLL
时,默认会在导出符号后面带上 @ 符号, 1. 如果Windows环境下使用Qt(mingw)开发,可在 .pro 文件中新增如下编译选项 windows{ QMAKE_LFLAGS += -Wl,--kill-at } 2. 如果使用VS开发,需要在工程的.def文件,增加导出
函数
说明 EXPORTS ;Explicit exports can go here ...
dll
导出
函数
名
在
dll
劫持中经常看到这种导出
函数
名
下划线开头@符号末尾跟着几个数字 _CreateXXX@0 _OpenXXX@2 _areateXXX@4 _closeXXX@4 解释: __stdcall会使导出
函数
名
字前面加一个下划线,后面加一个@再加上参数的字节数 例子分析:_areateXXX@4 源码:__declspec(
dll
export) int _stdcall area...
C++ 语言
65,183
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章