C++ 编写的DLL导出的函数名乱码含义解析

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模块定义文件

猜你喜欢

转载自www.cnblogs.com/xingboy/p/11161680.html
今日推荐