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

  • 相关阅读:
    [编程题] 微信红包
    MYSQL实现主从复制
    有关windows系统的EXE和DLL文件说法错误
    Http错误代码
    一步步优化JVM四:决定Java堆的大小以及内存占用
    一步步优化JVM三:GC优化基础
    一步步优化JVM二:JVM部署模型和JVM Runtime
    一步步优化JVM一:概述、方法及需求
    排查Java线上服务故障的方法和实例分析
    【转】Zookeeper-Watcher机制与异步调用原理
  • 原文地址:https://www.cnblogs.com/xingboy/p/11161680.html
Copyright © 2020-2023  润新知