IDL和生成代码分析

IDL:接口描述语言

这里使用thrift-0.8.0-xsb这个版本来介绍IDL的定义以及简单实例分析。

1. namespace 定义包名

2.struct 结构体,定义服务接口的参数和返回值用到的类结构。基本类型不需要使用struct.

3.service 定义接口:demo.thrift

 1 namespace java com.thrift.demo
 2 
 3 struct Parameter {
 4     1: required i32 id;
 5     2: required string name;
 6 }
 7 
 8 service DemoService {
 9     i32 demoMethod(1:string param1, 2:Parameter param2, 3:map<string,string> param3);
10 }

命令行执行 thrift -r --gen java demo.thrift,生成gen-java文件夹,在eclipse下创建名为gen-java的工程,然后将生成的gen-java放入eclipse的工作空间,即可关联成为一个gen-java工程(也可以自定义一个java工程,然后将生成的代码导入,此时只有JRE-System Library,java文件均报错。手动创建一个新的文件夹将Thrift工程需要的jar包以及libthrift-0.8.0.jar放置到文件夹下,同时在Java Build Path中添加引用。我这里直接使用eclipse自动fixed setup 导入,然后就出现了Refferenced Libraries文件夹,文件夹中包含了libthrift-0.8.0.jar等需要的jar包。如下图所示:

可见:每个struct会单独生成一个类,每个service也会生成一个类。下面着重看下生成的Demoservice.java。

如上图所示,Demoservice.java中主要由5部分组成:

1.接口类型:Iface(同步调用) AsyncIface(异步调用)

2.客户端类型:Client    AsynClient

3.方法参数封装类类型:demoMethod_args (方法名_args)

4.返回结果封装类类型:demoMethod_result(方法名_result)

5.Processor

转载于:https://www.cnblogs.com/leehfly/p/4936270.html

### 使用 OpenDDS IDL 编译器生成 DDS 代码的方法 OpenDDS 提供了一个强大的工具链来处理 IDL 文件并生成相应的 C++ 或其他目标语言的代码。以下是关于如何使用 OpenDDS IDL 编译器生成 DDS 代码的相关说明。 #### 工具位置与调用方式 OpenDDS IDL 编译器可以通过 `opendds_idl` 可执行文件访问,该文件通常位于 `$DDS_ROOT/bin/` 路径下,并已添加到系统的 PATH 环境变量中[^1]。如果环境配置正确,则可以直接通过命令行调用此工具。 #### 构建系统集成 尽管可以手动调用 IDL 编译器,但在实际开发过程中更推荐依赖构建系统自动完成这一过程。OpenDDS 支持两种主要的构建系统:MPC CMake[^2]。对于 MPC,开发者需要创建 `.mpc` 配置文件,并运行脚本将其转换为目标平台的构建文件(如 Visual Studio 解决方案)。例如,在 Windows 上可以使用以下命令: ```bash E:\OpenDDS-3.13>mwc.pl -type vs2017 UserManager.mpc ``` 上述命令会根据指定的 `.mpc` 文件生成适用于 Visual Studio 2017 的解决方案文件[^4]。 #### 自动生成流程概述 当采用构建系统时,IDLC(即 opendds_idl)会被作为构建的一部分自动触发。这意味着无需显式地单独运行 IDL 编译器;只需确保项目的构建配置正确无误即可实现 IDL 到目标代码的转化。 #### 手动编译情况下的基本语法 假如确实需要独立操作 IDL 编译器,其基础命令结构如下所示: ```bash opendds_idl [options...] input_file.idl ``` 其中 `[options...]` 表示各种可能的选项参数列表,而 `input_file.idl` 是待解析的接口定义文件名。 #### 示例代码片段展示 下面给出一段简单的 Python 脚本来演示如何自动化调用 OpenDDS IDL 编译器的过程。 ```python import subprocess def compile_idl(idl_path, output_dir): command = [ 'opendps_idl', '-d', output_dir, idl_path ] result = subprocess.run(command, capture_output=True, text=True) if result.returncode != 0: raise Exception(f"Failed to compile {idl_path}: {result.stderr}") compile_idl('example.idl', './generated_code') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值