Function name mangling in DLLs

-- DLL notes 3 of <Windows via C/C++>

 

Normally, C++ compilers mangle function and variable names. And there are some ways to change the way compilers mangling: 
   
   
extern "C"
   
   
Using extern "C" tells the compiler not to mangle the variable or function names.
    
    

__stdcall

Microsoft's C compiler mangles C functions even if you're not using C++ at all. When C functions are exported using __stdcall, Microsoft's compiler mangles the function names by prepending a leading underscore and adding a suffix of an @ sign followed by a number that indicates the count of bytes that are passed to the function as parameters. For example, this function is exported as _MyFunc@8 in the DLL's export section.

__declspec(dllexport) LONG __stdcall MyFunc(int a, int b);
  
  
Here is an example:

   
    

  
  
#define MYLIBAPI __declspec(dllexport)

MYLIBAPI int add(int, int);

MYLIBAPI int add(int, int, int);

MYLIBAPI int __stdcall addstd(int, int);

extern "C" MYLIBAPI int addextern(int, int);

extern "C" MYLIBAPI int __stdcall addexternStd(int, int);

And those are the mangled function name:

   
   
?add@@YAHHH@Z
?add@@YAHHHH@Z
          
          
?addstd@@YGHHH@Z
          
          
addextern
          
          
_addexternStd@8
          
          
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值