0

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

但是,这两项工作都有效,我想了解装饰的含义以及可以在哪里引用它们,以便在编写代码时可以预见它们。

4

1 回答 1

0

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

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

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

于 2019-04-23T13:14:11.843 回答