为什么微软的__stdcall函数不乱名?

人到中年琐事多 人到中年琐事多 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
以下面这个函数为例:
extern "C" __declspec(dllexport) void DisplayD(int x)
{
std::cout<<x;
}

这样编译出来的DLL,用dumpbin /exports查看,函数名没有乱,正常

改成这样:
__declspec(dllexport) void DisplayD(int x),
函数名就乱了,虽然在导入模块的时候照着那个乱乱的函数名可以成功调用,但是这样很不爽

再改成这样,加一个__stdcall修饰符:
extern "C" __declspec(dllexport) void __stdcall DisplayD(int x)
函数名也乱了,说明__stdcall的优先级比extern "C要高啊,盖掉了extern "C"

我想问的是,为什么那些WINAPI的函数没有乱码,没有看到有DEF文件,是不是因为它们都是用C写的缘故?
在C里编译是不会有函数名乱乱的现象的是吗?
如果我拿到一个DLL,全是乱乱的函数名,难道我也只有被迫用乱乱的函数名了吗?有没有其它办法能够使用好好的名?
...全文

相关推荐

评论 18
收藏 已收藏
分享
返回顶部