реклама на сайте
подробности

 
 
> Научите как подружить С++ и С? (кросс-вызов функций)
Sergio_chiper
сообщение Sep 27 2007, 12:38
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 20-10-06
Пользователь №: 21 521



Имеем проект написанный в С++.
Необходимо вызывать функции из чужой библиотеки, написанной на С. Это я умею smile.gif. Но вдруг пришлось из этой библиотеки на С обратиться к другой библиотеке на С++.
Задача кросс-вызовов, в моём случае, может быть ограничена только обращениями к функциям. В крайнем случае, можно дёргать без параметров.
Аттрибутов функций аналогичных __stdcall в IARе я не нашёл. sad.gif

Памажите!!!
Не хочу переписывать библиотеку на С++, слишком много ошибок на преобразование типов даёт sad.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 9)
Сергей Борщ
сообщение Sep 27 2007, 12:53
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(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();
}
примерно так.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Sergio_chiper
сообщение Sep 27 2007, 13:08
Сообщение #3





Группа: Новичок
Сообщений: 6
Регистрация: 20-10-06
Пользователь №: 21 521



Спасибо, мил человек.
Всю доку ИАРа перекопал и не допёр до очевидного sad.gif
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Sep 27 2007, 20:33
Сообщение #4


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Sergio_chiper @ Sep 27 2007, 17:08) *
Спасибо, мил человек.
Всю доку ИАРа перекопал и не допёр до очевидного sad.gif

А это в стандарте языка, а не в документации к компилятору.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2007, 20:44
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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

Что в "стандарте"? Обертки делать? Или может правила преобразования имен в С++? О чем это?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
dxp
сообщение Sep 28 2007, 03:30
Сообщение #6


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



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

Очевидно, про С связывание ("extern C"), не про обертки.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 28 2007, 07:09
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Sep 28 2007, 08:12
Сообщение #8


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



В любом заголовочном файле для CPP "extern C" явно видно. dxp уже ответил.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2007, 08:14
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(mdmitry @ Sep 28 2007, 11:12) *
В любом заголовочном файле для CPP "extern C" явно видно.

Только спрашивали не об этом sad.gif и вызов родных С++ функций из C нормального и тем более стандартизированного решения не имеет, ввиду нестандартизированности преобразования имен C++ функций в зависимости от аргументов и возвращаемых значений.
В принципе это не смертельно, если не называть нечто писанное на C++ "библиотекой" и при этом не иметь ее исходников.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Sep 28 2007, 19:45
Сообщение #10


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



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

Не досмотрел о вызове C++ из C. Здесь согласен, чтот нет стандартного доступа


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01453 секунд с 7
ELECTRONIX ©2004-2016