Как я могу вызвать функцию C ++ из C?[Дубликат]

На этот вопрос уже есть ответ здесь:Как вызвать функцию C ++ из C?6 ответовУ меня есть заголовок, объявляющий функции, которые принимают указатели на объекты C ++ в качестве параметров.Реализация находится в отдельном файле C ++.Как я могу включить этот заголовок в C и использовать функции в C, даже если аргументы должны быть указателями объектов C ++?
c++ c
4 голоса | спросил CheedleBoy 25 +04002010-10-25T08:17:42+04:00312010bEurope/MoscowMon, 25 Oct 2010 08:17:42 +0400 2010, 08:17:42

7 ответов


0
К сожалению, моя первая попытка ответила не на тот вопрос ....На вопрос, который вы задали ...Вы можете, как кто-то указал, обойти ---- +: = 0 =: + ---- .И это то, что я бы тоже порекомендовал.Что касается C, указатели на объекты C ++ должны быть полностью непрозрачными.Функции C ++ также могут быть помечены ---- +: = 1 =: + ----, если они находятся в глобальном пространстве имен.Вот пример:myfunc.hpp:myfunc.cpp:afoofile.cДругой вариант - сделать то же самое с творческим использованием ---- +: = 5 =: + ---- s в C. Это, ИМХО, довольно уродливо, но в любом случае вот пример:myfunc.hpp:myfunc.cpp:afoofile.c
ответил Omnifarious 25 +04002010-10-25T08:20:53+04:00312010bEurope/MoscowMon, 25 Oct 2010 08:20:53 +0400 2010, 08:20:53
0
Если вашему коду C нужно просто передать указатели и в конце концов передать его обратно в некоторый C ++, который фактически будет иметь дело с объектом, на который он указывает, вы сможете использовать ---- +: = 0 =: +---- в коде C и приведен обратно к ---- +: = 1 =: + ----, когда он возвращается в C ++.Если вы планируете код C на самом деле использовать указатель, вы в значительной степени застряли в обратном инжиниринге того, что делает ваш компилятор, и пытаетесь эмулировать его достаточно близко, чтобы заставить вещи работать.Даже в лучшем случае это будет ужасно и хрупко.
ответил Jerry Coffin 25 +04002010-10-25T08:22:28+04:00312010bEurope/MoscowMon, 25 Oct 2010 08:22:28 +0400 2010, 08:22:28
0
Создайте модуль-обертку на языке C ++, но внешние функции которого объявлены ---- +: = 0 =: + ---- .Это позволит вам получить чистый доступ к коду C ++ из C. Естественно, обертка должна заменять любые указатели на типы, не представляемые в C (т.е. классы), на либо ---- +: = 1 =: + ---- указатели (быстрыйи грязное решение) или указатели на незавершенные типы ---- +: = 2 =: + ---- (которые обеспечат некоторый уровень безопасности типов, если они используются последовательно.
ответил R.. 25 +04002010-10-25T11:30:26+04:00312010bEurope/MoscowMon, 25 Oct 2010 11:30:26 +0400 2010, 11:30:26
0
Оставив это после прочтения всевозможных постов на эту тему, это было легче всего следовать.http://research.engineering.wustl.edu/~beardj/Mixed_C_C++.htmlКроме того, в NetBeans пример закончился без необходимости прикасаться к make-файлу.
ответил James Scott 5 FriEurope/Moscow2014-12-05T12:18:43+03:00Europe/Moscow12bEurope/MoscowFri, 05 Dec 2014 12:18:43 +0300 2014, 12:18:43
0
Секрет «extern C», основная цель которого - предотвращение украшения имени.
ответил Alexander Rafferty 25 +04002010-10-25T08:21:54+04:00312010bEurope/MoscowMon, 25 Oct 2010 08:21:54 +0400 2010, 08:21:54
0
Ты не можешьВам нужно создать C-совместимый уровень абстракции:
ответил Marcelo Cantos 25 +04002010-10-25T08:23:06+04:00312010bEurope/MoscowMon, 25 Oct 2010 08:23:06 +0400 2010, 08:23:06
0

Check out this link:-

http://developers.sun.com/solaris/articles/mixing.html

The link contains the following topics:

  • Using Compatible Compilers

  • Accessing C Code From Within C++ Source

     -  Accessing C++ Code From Within C Source
    
  • Mixing IOstream and C Standard I/O

  • Working with Pointers to Functions

  • Working with C++ Exceptions

  • Linking the Program

ответил Aditya Singh 25 +04002010-10-25T08:21:30+04:00312010bEurope/MoscowMon, 25 Oct 2010 08:21:30 +0400 2010, 08:21:30

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132