В этой статье описывается, как вы можете смешивать C ++ и C в своем приложении.
Основанное на задачах разделение C и C ++
Хорошим подходом является использование C ++ в задаче пользовательского интерфейса и C во всех других задачах в вашем приложении.
Очевидно, что задача пользовательского интерфейса будет тесно связана с API TouchGFX и, следовательно, будет главным образом кодом C ++. Как объясняется в статье «Подключение пользовательского интерфейса к вашей системе» , мы рекомендуем использовать механизм взаимодействия между задачами, предоставляемый вашей ОС, для обмена данными между задачей пользовательского интерфейса и оставшейся системой. Как правило, это будет означать отправку сообщений / писем, представленных в виде структур C между задачами. Такие структуры понятны как на C, так и на C ++, и, следовательно, обеспечивают удобный и переносимый интерфейс между UI Task (C ++) и любыми другими задачами в вашей системе (C или C ++).
Используя этот подход, вы можете получить весь не-GUI-код в вашей системе в виде обычного C-кода, а только GUI-задача - C ++.
Вызов функций C из C ++
Если вам нужно вызывать функции C из кода C ++, этого легко достичь, добавив объявление функции, окруженное extern "C"
:
Codefile.cpp:
extern "C"
{
// function prototypes
int func();
// OR include header files containing C function declarations
#include <example.h>
}
/// func() and any functions in example.h can now be called from C++ code.
Вызов функций C ++ из C
Переход на другой путь требует немного больше работы. Строго невозможно вызвать C ++ из кода C, поэтому вам нужно будет создать функцию-оболочку C ++, которая использует искажение имен в стиле C, тем самым делая ее вызываемой из C.
Codefile.cpp:
// The extern declaration makes cpp_func callable from C
extern "C" void cpp_func();
// C++ wrapper function implementation.
void cpp_func()
{
// C++ code
HAL::getInstance()->someFunction();
}
mycode.c:
// Declaration of wrapper function
void cpp_func();
//cpp_func() is callable from this C code file.
Добавить комментарий