DECLARE_META_INTERFACE(INTERFACE)和IMPLEMENT_META_INTERFACE(INTERFACE, NAME)宏定义分析
这里讲的两个宏定义是IPC中鼎鼎大名的
DECLARE_META_INTERFACE(INTERFACE)
IMPLEMENT_META_INTERFACE(INTERFACE, NAME)
定义
frameworks\base\include\utils\IInterface.h
|
说明:其中的I##INTERFACE,##表示连接两个宏定义,在这里INTERFACE是模板名,被当作是宏定义。如果INTERFACE是ServiceManager那么I##INTERFACE就是IServiceManager。
使用:例子ICameraService
定义声明的宏定义:DECLARE_META_INTERFACE(INTERFACE)
ICameraService.h [frameworks\base\include\ui]
|
把这句展开就是:
|
就是说在ICameraService接口类中定义了一个String16的变量和两个函数。
然后在ICameraService.cpp [frameworks\base\libs\ui]中定义另外一个实现的宏定义。
就这么一句:
|
展开为:
|
展开就是说初始化了一个变量descriptor,实现了BpCameraService类的2个函数:getInterfaceDescriptor (), asInterface()。而且这个宏定义不属于在这个cpp文件中定义的BpCameraService类和在.h文件中定义的BnCameraService类。
在Camera.cpp [frameworks\base\libs\ui]中
const sp& Camera::getCameraService()函数调用
mCameraService = interface_cast(binder);
著名的interface_cast函数
|
interface_cast调用的是宏定义中的asInterface函数,然后返回的是new BpCameraService (obj)对象。
DECLARE_META_INTERFACE(INTERFACE)和IMPLEMENT_META_INTERFACE(INTERFACE, NAME)宏定义分析相关推荐
- container_of宏定义分析---linux内核
问题:如何通过结构中的某个变量获取结构本身的指针??? 关于container_of宏定义在[include/linux/kernel.h]中: /*_* * container_of - cast ...
- c语言中宏调用比函数调用,C语言-宏定义与使用分析
1.C语言中的宏定义 #define是预处理器处理的单元实体之- #define定义的宏可以出现在程序的任意位置 #define定义之后的代码都可以使用这个宏 2.定义宏常量 #define定义的宏常 ...
- pythonmainoffset_宏offsetof分析
1.前言 在C语言的结构体中,由于字节对齐的问题,所以成员的地址并不能直接根据数据类型的大小进行计算,使用宏offsetof可以获得结构体成员相对于结构体首地址的字节偏移量. 2.offsetof宏实 ...
- __FUNCTION__, __LINE__ 有助于debug的宏定义
__FUNCTION__, __LINE__ 今天无意之间看到一段代码,里面有这样一个片段: if (!interface) {err ("%s - error, can't find de ...
- Obective-C之宏定义
优(dan)美(teng)的前奏 宏定义这个东东,估计大家在代码中应该天天用吧. 在我刚刚做的一个项目中,各种往代码里码"#define"这种预处理指令. 什么动画时长啊,cell ...
- STM32: startup_**.s、Core_cm3.c、宏定义、HAL库
.s 启动文件选择 给STM32写程序时,我们需要在工程文件中加入厂家提供的启动文件(这里以STMf10x系列为例),里面包含的是启动代码,启动代码是一段和硬件相关的汇编代码.是必不可少的!这代码主要 ...
- Flutter iOS问题记录 - 多环境配置下Pod库的宏定义失效
文章目录 前言 开发环境 问题描述 问题分析 1. 创建用于测试的Pod库 2. 验证问题是否只存在于Pod库 3. __OPTIMIZE__在什么时候会定义 4. 影响__OPTIMIZE__定义的 ...
- iOS - 常用宏定义和PCH文件知识点整理
(一)PCH文件操作步骤演示: 第一步:图文所示: 第二步:图文所示: (二)常用宏定义整理: (1)常用Log日志宏(输出日志详细可定位某个类.某个函数.某一行) //=============== ...
- Object-C之宏定义
优(dan)美(teng)的前奏 宏定义这个东东,估计大家在代码中应该天天用吧. 在我刚刚做的一个项目中,各种往代码里码"#define"这种预处理指令. 什么动画时长啊,cell ...
最新文章
- wpf scrollviewer 两个事件相互影响_WPF绘制3D效果显示密集立体集装箱
- cloudstack centOS安装(一)
- 括号,逻辑与,逻辑或--运算符重载
- mlx rdma网卡指标参数简介
- 深度学习之非极大值抑制(Non-maximum suppression,NMS)
- jsp内置对象--application
- mysql 5.1版本无innodb trx_MySQL 5.7: Innodb 事务子系统优化-阿里云开发者社区
- java图片特效轮播代码_JQuery实现图片轮播效果
- oracle的class12驱动没有实现jdbc对clob或blob的存储, 解决办法
- 数据--第30课 - 树的定义
- PHPExcel存放多个sheet报错: Invalid parameters passed.
- 前端所有安全问题总结
- Oracle11g客户端client的下载与安装
- JAVA百度贴吧签到器
- DevExpress Office File API v20.1新版亮点:增强PDF Document API
- 抽象类和接口的小程序
- ABAQUS中的文件类型及功能
- 算法学习之——矩形切割思想
- 【SAP-SD】史上最全的SAP凭证类型总结
- python股票成交量柱状图_成交量柱状图怎样判断股票行情
热门文章
- 笔试题--Multicore简答题(上)
- redis 分布式中间件设计分析
- mybatis数据库连接池介绍和源码剖析
- VBA 提取 Office 2016 工具栏图标
- 12个强大的Web服务测试工具
- python面向对象实验报告_20192310 实验三《Python程序设计》实验报告
- python按条件拆分列表元素_Python按多个元素和条件拆分列表
- [微信小程序] js变量名称写活
- 今天写了个商品采购入得存储过程,使用游标实现的,实现了多个商品库存的增加...
- Android开发如何去除标题栏title(转)