Моя компания предоставляет третьей стороне DLL, которая предоставляет им функции API, которые они могут использовать для подключения к нашему приложению. DLL была написана на VC9, а функции API использовали соглашение о вызовах VC по умолчанию (__cdecl). Третья сторона построила свое приложение на основе этого интерфейса.
Теперь мне поручили написать обновленную версию DLL. Мы хотим, чтобы DLL имела точно такой же интерфейс, что и старая, чтобы их можно было использовать взаимозаменяемо. К сожалению, наша среда разработки теперь - CodeGear RAD Studio 2007, поэтому я должен написать DLL, используя это.
Лучшим решением было бы заставить и старые, и новые DLL экспортировать свои функции как __stdcall. Затем стороннее приложение можно было бы повторно связать с ожидаемыми функциями __stdcall, и все будут счастливы. К сожалению, по разным причинам это маловероятно.
В качестве альтернативы я могу объявить функции в моей DLL как __cdecl. Сторонний поставщик ожидает функций __cdecl, так что это может показаться хорошим решением. К сожалению, CodeGear настаивает на добавлении символа подчеркивания ('_') к имени функции __cdecl. Это означает, что стороннее приложение должно будет выполнить условный вызов MyApiFunction (...)
или _MyApiFunction (...)
, в зависимости от того, какую DLL они используют.
Итак, мой вопрос: как я могу экспортировать функции API из моей новой библиотеки DLL таким образом, чтобы они были __cdecl и имели префикс , а не с префиксом подчеркивания ('_')?