使用GetProcAddress获取C++重载函数

文章探讨了使用GetProcAddress在C++中获取重载函数地址的问题。由于函数重载导致的导出名不同,直接通过函数名无法获取正确地址。解决方案包括使用extern "C"关键字或通过导出名和序数值来获取函数地址,如借助dumpbin等工具查看DLL导出表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  GetProcAddress函数是用来在动态加载完动态链接库后,从链接库中获取函数地址的。它的用法如下:

FARPROC GetProcAddress(HMODULE hModule,LPCSTR lpProcName);

hModule参数就是LoadLibrary函数返回的动态链接库的句柄,lpProcName指向要获取的函数名称,函数名称以0结尾,对于函数名称是数值编号的lpProcName可以指定为编号数值。函数执行成功则返回要获取的函数的入口地址,失败则返回NULL。
  C++是支持函数重载的,也就是说允许多个不同的函数可以有同样的函数名。那么能不能通过函数名来获取C++的重载函数呢?从理论上来分析,由于GetProcAddress函数是通过函数名来唯一确定被调用函数的地址的,所以重载函数的地址是不可能用GetProcAddress通过函数名来获取的。
  MSDN对GetProcAddress函数进行解释时,说

The spelling and case of the function name pointed to by lpProcName must be identical to that in the EXPORTS statement of the source DLL’s module-definition (.DEF) file. The exported names of Win32 API functions may differ from the names you use when calling these functions in your code.

  翻译过来就是,lpProcName

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值