VC++默认采用__cdecl的调用方式。
C方式编译下:
__cdecel 函数修饰符格式"_函数名"
__stdcall函数修饰符格式"_函数名@参数字节数"
C++方式编译:
_cdecl:函数名前“?”表示开始,函数名后跟 @@YA表示参数表开始,函数表代号表示如下:
X表示VOID,D表示CHAR,E表示unsigned char,F表示short,H表示int,I表示unsigned int...参数表第一项表示函数的返回值类型,其后一次为参数的类型。参数表最后以“@Z”标识整个名字的结束。如果该函数无参数,则以“Z”结束。比如?TestC@@@YAHH@Z
__stdcall和__cdecl类似,用@@YG表示参数表的开始。
虽然C++的函数名称修饰方式比较复杂,但是可以支持函数重载。
可以在函数名前加入extern "C"强制采用C的函数名称修饰方式。
利用编译器内部变量__cplusplus进行条件编译:
#ifdef __cplusplus
extern "C" {
#endif
...
...
#ifdef __cplusplus
}
#endif