刚才去翻了翻,找到参考了:
C++编译时函数名修饰约定规则:
__stdcall调用约定:
1、以 "? "标识函数名的开始,后跟函数名;
2、函数名后面以 "@@YG "标识参数表的开始,后跟参数表;
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 "标识结束。
其格式为 "?functionname@@YG*****@Z "或 "?functionname@@YG*XZ ",例如
int Test1(char *var1,unsigned long)-----“?Test1@@YGHPADK@Z”
void Test2() -----“?Test2@@YGXXZ”
__cdecl调用约定:
规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的 "@@YG "变为 "@@YA "。
__fastcall调用约定:
规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的 "@@YG "变为 "@@YI "。
如果要用DEF文件输出一个 "C++ "类,则把要输出的数据和成员的修饰名都写入.def模块定义文件
所以... 通过def文件来导出C++类是很麻烦的,并且这个修饰名是不可避免的
转载于:https://www.cnblogs.com/MarvinGeng/archive/2012/09/26/2703472.html