Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Научите как подружить С++ и С? (кросс-вызов функций)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Sergio_chiper
Имеем проект написанный в С++.
Необходимо вызывать функции из чужой библиотеки, написанной на С. Это я умею smile.gif. Но вдруг пришлось из этой библиотеки на С обратиться к другой библиотеке на С++.
Задача кросс-вызовов, в моём случае, может быть ограничена только обращениями к функциям. В крайнем случае, можно дёргать без параметров.
Аттрибутов функций аналогичных __stdcall в IARе я не нашёл. sad.gif

Памажите!!!
Не хочу переписывать библиотеку на С++, слишком много ошибок на преобразование типов даёт sad.gif
Сергей Борщ
Цитата(Sergio_chiper @ Sep 27 2007, 15:38) *
Памажите!!!
Код
//файл .cpp:
extern void cpp_func();
extern "C" void wrapper()
{
    cpp_func();
}
// файл .c:
void c_func()
{
// call cpp_func();
   wrapper();
}
примерно так.
Sergio_chiper
Спасибо, мил человек.
Всю доку ИАРа перекопал и не допёр до очевидного sad.gif
mdmitry
Цитата(Sergio_chiper @ Sep 27 2007, 17:08) *
Спасибо, мил человек.
Всю доку ИАРа перекопал и не допёр до очевидного sad.gif

А это в стандарте языка, а не в документации к компилятору.
zltigo
Цитата(mdmitry @ Sep 27 2007, 23:33) *
А это в стандарте языка, а не в документации к компилятору.

Что в "стандарте"? Обертки делать? Или может правила преобразования имен в С++? О чем это?
dxp
Цитата(zltigo @ Sep 28 2007, 03:44) *
Что в "стандарте"? Обертки делать? Или может правила преобразования имен в С++? О чем это?

Очевидно, про С связывание ("extern C"), не про обертки.
Сергей Борщ
Цитата(dxp @ Sep 28 2007, 06:30) *
Очевидно, про С связывание ("extern C"), не про обертки.
Не уверен:
Цитата
Необходимо вызывать функции из чужой библиотеки, написанной на С. Это я умею
Т.е. про extern "C" человек исходно знал.
mdmitry
В любом заголовочном файле для CPP "extern C" явно видно. dxp уже ответил.
zltigo
Цитата(mdmitry @ Sep 28 2007, 11:12) *
В любом заголовочном файле для CPP "extern C" явно видно.

Только спрашивали не об этом sad.gif и вызов родных С++ функций из C нормального и тем более стандартизированного решения не имеет, ввиду нестандартизированности преобразования имен C++ функций в зависимости от аргументов и возвращаемых значений.
В принципе это не смертельно, если не называть нечто писанное на C++ "библиотекой" и при этом не иметь ее исходников.
mdmitry
Цитата(zltigo @ Sep 28 2007, 12:14) *
Только спрашивали не об этом sad.gif и вызов родных С++ функций из C нормального и тем более стандартизированного решения не имеет, ввиду нестандартизированности преобразования имен C++ функций в зависимости от аргументов и возвращаемых значений.
В принципе это не смертельно, если не называть нечто писанное на C++ "библиотекой" и при этом не иметь ее исходников.

Не досмотрел о вызове C++ из C. Здесь согласен, чтот нет стандартного доступа
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.