Я пытался экспортировать простую тестовую функцию для 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 @ numbers , тогда как .def удаляет все искажения, как это требуется для использования с приложением, которое необходимо экспортировать в.
Может кто-нибудь объяснить, почему это так? Мне просто интересно узнать о двух методах. Спасибо!