您可能已经知道,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.




来源