我试图理解和预期如何在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");
但是,这两项工作我都想了解装饰的含义以及在何处可以引用它们,以便在编写代码时可以预期到它们。
答案 0 :(得分:0)
修饰符(或name mangling)基于这样的事实,即您可以具有名称相同但参数不同的函数。
DLL导出不包括函数签名,仅包括名称。因此,名称被“修饰”以反映这些参数(类,名称空间,参数,返回类型,调用约定等)。
要删除装饰,请在extern "C"
块内声明该函数。