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

  • 相关阅读:
    Python 正则表达式简单了解
    scrapy 框架简单 爬取 4K高清 壁纸
    解决验证注解随机问题
    @ConfigurationProperties
    ConstraintValidator自定义注解
    通过日志解读Spring-Mybatis执行顺序
    Spring整合mybatis配置文件
    设计模式——代理模式
    Mybatis框架配置
    设计模式——单例模式
  • 原文地址:https://www.cnblogs.com/xingboy/p/11161680.html
Copyright © 2020-2023  润新知