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



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

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

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

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

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

最新更新