2014-01-22 3 views
0

Этот вопрос связан с именем mangling при экспорте функций в DLL. Microsoft по этой ссылке говорит, чтоНазначение функций. _cdecl convention

Символ подписи под символом (_) имеет префикс имен, кроме случаев экспорта функций __cdecl, которые используют связь C.

ссылка: http://msdn.microsoft.com/ru-ru/library/zkwh89ks.aspx

Вопрос заключается в том: что должно происходить, если я экспортировать функцию _cdecl используя C связь? Существует ли стандартное поведение для этого случая? Спасибо заранее.

ответ

0

extern "C" void Foo (int) приведет к Foo. C только экспортирует функции без mangeling с использованием их имени функции

+0

Не могли бы вы связать документ или что-то там, где это указано? Потому что msdn говорит: > Для функций C или функций, объявленных как extern «C», это включает в себя оформление на основе платформы, основанное на соглашении о вызове. Значит, есть украшение. http://msdn.microsoft.com/en-us/library/3y1sfaz2.aspx – VoidWalker

+0

https://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l .doc% 2Flanguage% 2Fref% 2Fcplr020.htm под именем Mangeling (только для C++). Чтобы компилятор C++ не определял имя функции, вы можете применить спецификатор ссылки extern «C» к объявлению или объявлениям, как показано в следующий пример: extern "C" { int f1 (int); int f2 (int); int f3 (int); }; Это объявление сообщает компилятору, что ссылки на функции f1, f2 и f3 не должны искажаться. – ACB

+0

может быть, что визуальная студия добавляет подчеркивания или тому подобное к имени для вызовов соглашений, отличных от cdecl, но по крайней мере для cdecl используется только имя. – ACB

Смежные вопросы