我正在开发一个使用 RTI Connext DDS(版本 6.0.1)用于分布式系统的项目,并且我的 IDL 设置遇到问题。我的目标是使用一个 IDL 文件 (Example1.idl) 中定义的结构和另一个 IDL 文件 (Example2.idl) 中的另一个结构,这两个结构都驻留在单独的模块中。我尝试利用 #include 指令和 rtiddsgen 命令中的 -I 选项来解析跨模块的类型,但我不断遇到以下错误:
未找到成员类型“ExampleModule1::ExampleStruct1”。
项目结构:______ IDL测试: ├─idl/ │ ├─ 示例1.idl │ └─ 示例2.idl └─ 生成.cmd 示例1.idl:__
module ExampleModule1 {
struct ExampleStruct1 {
long id;
string name;
};
};
Example2.idl:_______________
#include "Example1.idl"
module ExampleModule2 {
struct ExampleStruct2 {
ExampleModule1::ExampleStruct1 refStruct;
double additionalData;
};
};
生成.cmd:_______________
rtiddsgen "%NDDSHOME%\bin\rtiddsgen.bat" --ppDisable -language Java -d generated idl/Example2.idl -I idl
有人可以建议这里可能出了什么问题吗?是否有特定的方法来构建 IDL 文件或特定的命令语法,我应该使用它来成功地在 RTI Connext DDS 中跨模块引用结构?
任何有关如何为此场景正确设置和生成代码的见解或示例将不胜感激!
您正在使用该选项
--pp禁用
在 rtiddsgen 命令中,这将禁用预处理器。 同时,您正在使用#include,这是由预处理器处理的。
您需要在不带 --ppDisable 的情况下运行相同的命令,以便对文件进行预处理并解析 #include。