社区
C++ 语言
帖子详情
为什么C++生成的Dll函数名带有@?
BruceJiang
2012-02-25 05:52:33
为什么C++生成的Dll函数名带有@?如“_AvisynthPluginInit2@4”后面是数字2加@还有个4,都是这样的?
怎么调用呢?声明的函数又不能带有@? 请大侠赐教,多谢!
...全文
721
7
打赏
收藏
为什么C++生成的Dll函数名带有@?
为什么C++生成的Dll函数名带有@?如“_AvisynthPluginInit2@4”后面是数字2加@还有个4,都是这样的? 怎么调用呢?声明的函数又不能带有@? 请大侠赐教,多谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
名字碾平。
C++
DLL
导出
函数
名
本文详细解释了在
C++
和C中使用Visual Studio 2008创建
DLL
时,导出
函数
名
称的差异及其原因。通过使用传统模块定义文件(.def)和Visual
C++
提供的方便方法,可以实现不同编译器环境下
DLL
的正确导出。文章还介绍了如何使用预处理指示符(#pragma)解决
函数
名
改编问题,确保
DLL
在不同环境下的兼容性。
C++
中
dll
文件的
生成
和调用
本文介绍了将.cpp 文件编译成.
dll
文件的两种方法,一是使用 __declspec(
dll
export) 创建,二是用模块(.def)方式
生成
。还说明了
C++
程序调用.
dll
文件的步骤,包括复制相关文件、添加资源文件等,并给出了参考资料。
MinGW g++.exe 编译
DLL
时,导出
函数
名
带@的问题
本文介绍如何在使用MinGW g++编译
DLL
时去除导出
函数
名
后的@符号,通过正确配置-Wl,--kill-at参数实现,并提供具体步骤与命令行实例。
dll
导出
函数
名
的那些事
函数
名
改编
c语言
dll
导出
函数
名
,详解
C++
动态库导出
函数
名
乱码及解决
博主在尝试从
C++
的
dll
中导出
函数
时,发现导出的
函数
名
出现“乱码”。通过Dependency Walker查看,了解到
C++
编译时
函数
名
修饰约定规则。最终找到解决办法,即在导出
函数
前加上“extern \C\”,成功解决了在C#中调用的问题。
C++ 语言
65,211
社区成员
250,516
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章