1# IDL工具 2 3## 简介 4 5在OpenHarmony中,当应用/系统服务的客户端和服务端进行IPC(Inter-Process Communication)跨线程通信时,需要定义双方都认可的接口,以保障双方可以成功通信,OpenHarmony IDL(Interface Definition Language)则是一种定义此类接口的工具。OpenHarmony IDL先把需要传递的对象分解成操作系统能够理解的基本类型,并根据开发者的需要封装跨边界的对象。 6 7 **图1** IDL接口描述 8 ![IDL-interface-description](./figures/IDL-interface-description.png) 9 10OpenHarmony IDL接口描述语言主要用于: 11 12- 声明系统服务对外提供的服务接口,根据接口声明在编译时生成跨进程调用(IPC)或跨设备调用(RPC)的代理(Proxy)和桩(Stub)的C/C++代码或JS/TS代码。 13 14- 声明Ability对外提供的服务接口,根据接口声明在编译时生成跨进程调用(IPC)或跨设备调用(RPC)的代理(Proxy)和桩(Stub)的C/C++代码或JS/TS代码。 15 16**图2** IPC/RPC通信模型 17 18![IPC-RPC-communication-model](./figures/IPC-RPC-communication-model.png) 19 20使用OpenHarmony IDL接口描述语言声明接口具有以下优点: 21 22- OpenHarmony IDL中是以接口的形式定义服务,可以专注于定义而隐藏实现细节。 23 24- OpenHarmony IDL中定义的接口可以支持跨进程调用或跨设备调用。根据OpenHarmony IDL中的定义生成的信息或代码可以简化跨进程或跨设备调用接口的实现。 25 26**部件内子模块职责** 27 28| 子模块名称 | 职责 | 29| ---------------- | ------------------------------------------------------------| 30| 接口文件解析模块 | 解析校验接口定义文件。 | 31| stub/proxy自动生成模块 | 根据IPC/RPC规格自动生成Stub服务端和Proxy客户端代码。 | 32 33## 目录 34 35``` 36foundation/ability/idl_tool 37├── ast # idl语法解析定义代码 38├── codegen # 跨进程通信模板生成模块代码 39├── metadata # matedata自定义数据解析模块代码 40├── parser # idl解析模块代码 41├── test # 测试目录 42└── util # 公共方法代码 43``` 44 45## 开发步骤 46开发步骤可参考[开发指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/IDL/idl-guidelines.md#31-c%E5%BC%80%E5%8F%91%E6%AD%A5%E9%AA%A4) 47 48 49## 相关仓 50元能力子系统 51 52[ability_base](https://gitee.com/openharmony/ability_ability_base) 53 54[ability_runtime](https://gitee.com/openharmony/ability_ability_runtime) 55 56[dmsfwk](https://gitee.com/openharmony/ability_dmsfwk) 57 58[form_fwk](https://gitee.com/openharmony/ability_form_fwk) 59 60[**idl_tool**](https://gitee.com/openharmony/ability_idl_tool) 61