gpt4 book ai didi

c - __stdcall 名称修饰的语法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:08 24 4
gpt4 key购买 nike

我有一个调用一组函数的程序,如下所示:

int _stdcall VB_Create(char*);
int _stdcall VB_Open(unsigned int, unsigned int, unsigned int, unsigned int);
...
...

如果名称修饰不匹配,链接器会显示如下错误:

error LNK2019: unresolved external symbol "int __stdcall VB_Create(char *)" (?VB_Create@@YGHPAD@Z) .....

我的理解是_stdcall语法是 '_' + 'name of the function' + '@' + 'number of arguments * 4' .

那么,为什么链接器要求 ?VB_Create@@YGHPAD@Z名字装饰?这是什么标准?

最佳答案

这是 Visual C++ name mangling (我不知道 MSDN 上有描述编码的官方页面;我找不到)。

C++ 函数需要的不仅仅是将它们的名称编码到以二进制形式结束的符号中:这些符号需要是唯一的,但 C++ 函数名称不需要是唯一的。除了其他原因,C++ 函数可以重载,您可以在不同的命名空间中使用同名函数,并且您必须能够处理成员函数。

编译器使用紧凑的编码方案,就像这个一样,因此函数可以被唯一标识。

关于c - __stdcall 名称修饰的语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6943315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com