Есть ли ссылка на декорации функций DLL в lpProcName GetProcAddress? - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь понять и предвидеть, как ссылаться на функции в 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 голосов
/ 23 апреля 2019

Декорации (или искажение имени ) основаны на том факте, что у вас могут быть функции с одинаковыми именами, но с разными аргументами.

Экспорт DLL не включает сигнатуры функций, толькоимя.Поэтому имя «украшено», чтобы отразить эти аргументы (классы, пространства имен, аргументы, тип возврата, соглашение о вызовах и т. Д.).

Чтобы удалить оформление, объявите функцию внутри блока extern "C".

...