GetProcAddress的lpProcName中是否有DLL函数装饰的引用?

问题描述 投票:0回答:1

我试图理解并预测如何在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");

然而,这两项工作,我想了解装饰的含义以及我可以在哪里引用它们,以便在编写代码时能够预测它们。

c++ dllimport getprocaddress
1个回答
0
投票

装饰(或者,name mangling)基于这样一个事实,即您可以使用相同名称但不同参数的函数。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.