您可能已经知道,TouchGFX是用C ++实现的,而TouchGFX API也是C ++。这意味着至少直接与UI相关的代码必须是C ++代码。但是,并不需要整个系统都以C ++实现。
本文介绍了如何在应用程序中混合使用C ++和C。
基于任务的C和C ++分离
一个好的方法是在应用程序的UI任务中使用C ++,在所有其他任务中使用C。
UI任务显然将与TouchGFX API紧密联系在一起,因此主要是C ++代码。如文章 “将UI连接到系统”中所述,我们建议使用OS提供的任务间通信机制在UI任务和其余系统之间传递数据。通常,这意味着在任务之间发送以C结构表示的消息/邮件。这样的结构在C和C ++中都可以理解,因此可以在UI任务(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.
【来源】