_cdecl 调用约定:
1、以“?”标识函数名的开始,后跟函数名;
2、函数名后面以“@@YA”标识参数表的开始,后跟参数表;
3、参数表以代号表示:
X -- void
D -- char
E -- unsigned char
F -- short
H -- int
I -- unsigned int
J -- long
K -- unsigned long
M -- float
N --double
_N --bool
...
PA-- 表示指针,后面的代号表明指针类型,如果相同类型的指针连续出现,以“ 0 ”代替,一个“ 0 ”代表一次重复;
4、参数表的第一项为该函数的返回值类型,其后依次为参数的数据类型,指针标识在其所指数据类型前;
5、参数表后以“@Z”标识整个名字的结束,如果该函数无参数,则以“ Z ”标识结束。
//(?my_add_int@@YGHHH@Z)
int __stdcall my_add_int(int a, int b)
{
return a + b;
}
//(?print_int@@YAXH@Z)
void __cdecl print_int(int a)
{
printf("%d ", a);
}
// (?fun@@YIXXZ)
void __fastcall fun(){}
int main()
{
my_add_int(12, 23);
print_int(12);
fun();
return 0;
}