Изменение имени stdcall с использованием extern c и dllexport по сравнению с определениями модулей (msvc ++)

Я пытался экспортировать простую тестовую функцию для работы dll с приложением (fyi: mIRC), которое определяет соглашение о вызовах как:

int __stdcall test_func(HWND mWnd, HWND aWnd, char *data, char *parms, BOOL show, BOOL nopause)

Теперь, чтобы вызвать это из приложения, я бы использовал test_func , но я заметил, что из-за искажения имени это не так просто, как я думал.

Благодаря аналогичным темам здесь я пришел к пониманию, что использование extern «C» в сочетании с __ declspec (dllexport) является эквивалентным (в некоторой степени) методом удаления искажений в модуле определения (.def). Однако при использовании метода extern / dllexport моя функция (в качестве примера) всегда _test_func @ числа, тогда как .def удалил все искажения, необходимые для использования с приложением, в которое мне нужно было экспортировать.

Может кто-нибудь объяснить, почему это так? Мне просто интересно узнать о двух методах. Спасибо!

15
задан mina 28 December 2010 в 23:15
поделиться