刚才去翻了翻,找到参考了:

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++类是很麻烦的,并且这个修饰名是不可避免的

posted on 2012-09-26 10:10  MarvinGeng  阅读(2459)  评论(0编辑  收藏  举报