Как изменить экспортированное оформление имени для __stdcall в VС++?

StackOverflow https://stackoverflow.com/questions/4498452

Вопрос

Вот как у меня сейчас объявлена ​​функция экспорта:

extern "C" __declspec(dllexport)
Iexport_class* __stdcall GetExported_Class();

Когда VS2008 скомпилировал исходный код для этого, созданная dll содержит это в своей таблице экспорта:

_GetExported_Class@0

Для совместимости с другими компиляторами мне нужно, чтобы приведенное выше оформление выглядело следующим образом:

GetExported_Class

Изменение соглашения о вызовах на __cdecl украсит его так, как я хочу, но соглашение будет неправильным, поэтому я не смогу его использовать.Мне нужно, чтобы он был оформлен так, как выглядит __cdecl, но вместо этого использует __stdcall.

Есть какой-либо способ сделать это без используя файл .def?Есть ли переключатель или опция, которую я могу передать компоновщику link.exe, чтобы он украшал имя экспорта так, как я хочу?

Спасибо

Это было полезно?

Решение

Нет.Все имена __stdcall оформлены таким образом.Я поражен тем, что у вас есть другой компилятор, который не ожидает, что экспорт __stdcall будет оформлен таким образом.Переопределение компоновщика с помощью .def — это почти все, что вы можете сделать, если только вы не хотите изменить PE-файл после создания.

Другие советы

Я не понимаю, почему вы не хотите использовать файл .def, но это ваш единственный вариант.

Компоновщик поддерживает переключатель экспорта, но его нельзя использовать с функциями, аннотированными __stdcall:

http://msdn.microsoft.com/en-US/library/7k30y2k5.aspx

Путь к файлу def — практически единственное решение.

Да:

Можете добавить /EXPORT к lib.exe командную строку или добавьте #pragma в ваш исходный файл:

#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")

Или еще проще:Внутри тела функции используйте

#pragma comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__)

Источник: https://stackoverflow.com/a/2805560/280534

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top