zoukankan      html  css  js  c++  java
  • 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模块定义文件

  • 相关阅读:
    断开/删除 SVN 链接(.svn)的几种方法
    Android 中 ListView 常用属性合集
    Android 中 GridView 常用属性合集
    LeetCode-387-字符串中的第一个唯一字符
    LeetCode-374-猜数字大小
    LeetCode-290-单词规律
    LeetCode-278-第一个错误的版本
    LeetCode-383-赎金信
    LeetCode-367-有效的完全平方数
    LeetCode-350-两个数组的交集 II
  • 原文地址:https://www.cnblogs.com/xingboy/p/11161680.html
Copyright © 2011-2022 走看看