GetProcAddress的lpProcName中是否有DLL函数修饰的参考?

时间:2019-04-23 13:12:11

标签: c++ dllimport getprocaddress

我试图理解和预期如何在DLL中引用函数。

当我们在几个要访问的DLL中引用某些函数以进行一些计算时,在某些函数中,我们仅将进程名称用作参数lpProcName(例如"my_calc_function") 。但是,在其他一些功能(用于不同的DLL)中,我们必须为lpProcName(例如"?my_other_calc_function@@YA....")添加各种修饰

在一种情况下

m_lpfn_my_calc_function_pointer = (lpfn_my_calc_func)::GetProcAddress(m_hOneDll,"this_address_works");

在另一种情况下

m_lpfn_my_other_calc_function_pointer = (lpfn_my_calc_func)::GetProcAddress(m_hAnotherDll,"?this_address_has@@YAXNPEAN00PEAH@Z");

但是,这两项工作我都想了解装饰的含义以及在何处可以引用它们,以便在编写代码时可以预期到它们。

1 个答案:

答案 0 :(得分:0)

修饰符(或name mangling)基于这样的事实,即您可以具有名称相同但参数不同的函数。

DLL导出不包括函数签名,仅包括名称。因此,名称被“修饰”以反映这些参数(类,名称空间,参数,返回类型,调用约定等)。

要删除装饰,请在extern "C"块内声明该函数。