在TouchGFX中使用C代码

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



来源

【TouxhGFX】集成 之 《Using C code with TouchGFX》的更多相关文章

  1. CI集成phpunit Error: No code coverage driver is available 的解决

    CI集成phpunit时,运行报No code coverage driver is available的错误,如下图: yanglingdeMacBook-Pro:tests yangling$ p ...

  2. ASP.NET Core 中文文档 第二章 指南(1)用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序

    原文:Your First ASP.NET Core Application on a Mac Using Visual Studio Code 作者:Daniel Roth.Steve Smith ...

  3. C语言工具---Code::Blocks

    Code::Blocks Code::Blocks 是一个开源的全功能的跨平台C/C++集成开发环境. Code::Blocks是开放源码软件.由纯粹的C++语言开发完成,它使用了著名的图形界面库wx ...

  4. iOS 持续集成

    iOS 持续集成系列 - 开篇 前言 iOS 开发在经过这几年的野蛮生长之后,慢慢地趋于稳定.无论开发语言是 Objective-C 还是 Swift,工程类型是 Hybird 还是原生,开发思想是 ...

  5. Memcached理解笔2---XMemcached&Spring集成

    一.Memcached Client简要介绍 Memcached Client目前有3种: Memcached Client for Java SpyMemcached XMemcached 这三种C ...

  6. jenkins-为什么要持续集成

    持续集成(Continuous Integration),也就是我们经常说的 CI,是现代软件开发技术的基础.本文论述了当前软件开发过程中存在的问题,讲解了持续集成.持续集成服务器的概念,最终探讨了为 ...

  7. 持续集成平台jenkins

    一. 什么是持续集成 1. 概念 持续集成(Continuous Integration),也就是我们经常说的CI 持续集成(CI)是一种实践,可以让团队在持续的基础上收到反馈并进行改进,不必等到开发 ...

  8. Code::Blocks

    Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境. Code::Blocks是开放源码软件.Code::Blocks由纯粹的C++语言开发完成,它使用了著名的图形界面库w ...

  9. Memcached笔记——(二)XMemcached&Spring集成

    今天研究Memcached的Java的Client,使用XMemcached 1.3.5,做个简单的测试,并介绍如何与Spring集成. 相关链接: Memcached笔记--(一)安装&常规 ...

  10. 高效扩展工具让 VS Code 如虎添翼

    Codelf 变量命名神器 Star:10688 https://github.com/unbug/codelf 新建项目,变量,类,方法,接口都需要命名,一个好的命名可以一眼看出这个地方的功能,Co ...

随机推荐

  1. 为什么要实践 A+ES & CQRS ?

    Wow : 基于 DDD & EventSourcing 的现代响应式 CQRS 架构微服务开发框架 中文文档 领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查 ...

  2. grpc是基于http/2协议的高性能的rpc框架

    师傅领进门,修行在个人,跟着官方脚手架demo了grpc后,之后就需要扩展前后知识边界,下面总结grpc的前世今生和最佳实践. https://www.cnblogs.com/JulianHuang/ ...

  3. GO的逃逸分析

    逃逸分析 前言 指的就是由编译器决定内存分配的位置,不需要由程序员来指定.函数中申请一个新的对象,其目的是为了提高程序的性能,减少内存分配和垃圾回收的开销. 分配在 栈 中, 则函数执行结束则可自动将 ...

  4. 取消deepin-wine TIM置顶

    取消把deepin-wine TIM置顶 问题 在manjaro系统下,使用deepin-wine安装了tim.点击了tim的置顶功能后无法取消了.无法取消的原因是,弹出取消置顶的弹框会被置顶的tim ...

  5. 微信小程序中业务域名的配置

    需要配置业务域名,需要先将域名http转https 1,首先在该微信小程序的公众号平台中下载 业务域名的证书 2,将下载的证书放进nginx的根目录 3,在nginx中 (root为.txt的地址)

  6. 三问三答:细数GaussDB迁移的核心技术

    摘要:本文从客户视角的三个疑问出发,一起了解华为云GaussDB数据库的迁移解决方案具有哪些核心技术,如何做到让客户迁移过程安心.放心.省心. 迁移是数据库选型过程中客户最为关心的话题之一,经过大量的 ...

  7. 六一新玩法!AI涂鸦秒变精美艺术画

    摘要:上华为云ModelArts体验AI涂鸦新玩法,赢漫威复仇者联盟乐高!祝大小朋友们六一儿童节快乐~ 本文分享自华为云社区<[云享热点]六一新玩法!AI 涂鸦秒变精美艺术画>,作者:华为 ...

  8. 几款Java开发者必备常用的工具,准点下班不在话下

    摘要:一问一答的形式轻松学习掌握java工具. 以一问一答的形式学习java工具 Q:检查内存泄露的工具有?A: jmap生成dump转储文件,jhat可视化查看. Q:某进程CPU使用率一直占满,用 ...

  9. 顶会VLDB'22论文解读:多元时序预测算法METRO

    摘要:本文提出了一个端到端的MTS预测框架METRO.METRO的核心思想是利用多尺度动态图建模变量之间的依赖关系,考虑单尺度内信息传递和尺度间信息融合. 本文分享自华为云社区<VLDB'22 ...

  10. “/usr/bin/hdp-select”, line 226 print “ERROR: Invalid package – “ + name ^ SyntaxError: Missing parentheses in call to ‘print’. Did you mean print(“ERROR: Invalid package

    spark-submit时报错 python升级3.7引起 恢复2.7正常