Как изменить оформление экспортированного имени для __stdcall в VC ++? - PullRequest
5 голосов
/ 21 декабря 2010

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

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

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

_GetExported_Class@0

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

GetExported_Class

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

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

Спасибо

Ответы [ 3 ]

3 голосов
/ 21 декабря 2010

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

2 голосов
/ 21 декабря 2010

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

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

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

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

0 голосов
/ 15 июня 2016

Да:

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

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

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

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

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

...