我也是从网上抄了一个示例,自己测试了一下,
1. 首先写一个IDL:
// Demo.idl
module Demo {
#pragma DCPS_DATA_TYPE "Demo::Pos"
#pragma DCPS_DATA_KEY "Demo::Pos pos_id"
struct Pos {
long pos_id;
long pos_x;
long pos_y;
};
};
2. 然后就可以生成代码了:
opendds_idl Demo.idl
tao_idl Demo.idl
// 备注执行这个命令,需要添加环境变量:
// include=D:\OpenDDS3133
// 否则会提示找不到dds目录下包含的文件,
tao_idl DemoTypeSupport.idl
其中tao_idl Demo.idl 生成
< filename >C.cpp
< filename >C.h
< filename >C.inl
< filename >S.cpp
< filename >S.h
< filename >S.inl //这个不一定有
opendds_idl Demo.idl 生成
< filename >TypeSupport.idl
< filename >TypeSupportImpl.h
< filename >TypeSupportImpl.cpp
其中生成的IDL文件中包括了PosTypeSupport, PosDataWriter 和PosDataReader的接口定义。这些特定的DDS类型接口将会在稍后注册数据类型,发布数据样本和接收数据样本时使用,而生成的cpp文件实现了这些接口。
生成的IDL文件还需要和原始的IDL一起,用 TAO IDL编译器编译,以便生成相应的接口框架。之后这些生成的实现文件需要和使用 Pos类型的OpenDDS应用程序源码一起编译链接。
而 新生成的IDL还需要再用tao_idl生成一遍。
3. 还有一种方法生成各种代码文件,同时生成项目文件,因为刚才的方法并没有生成项目文件还是不能用。
3.1 写一个mpc文件:
project(*idl): dcps {
TypeSupport_Files {
Demo.idl
}
custom_only = 1
}
project(*publisher) : dcpsexe_with_tcp {
exename = publisher
after += *idl
TypeSupport_Files {
Demo.idl
}
Source_Files {
DataWriter.cpp
Publisher.cpp
}
}
project(*subscriber) : dcpsexe_with_tcp {
exename = subscriber
after += *publisher
TypeSupport_Files {
Demo.idl
}
Source_Files {
DataReader.cpp
Subscriber.cpp
}
}
3.2 提供相关的代码文件(可以先随便新建一个空的):
发布端:
Publisher.cpp
DataWriter.h
DataWriter.cpp
订阅端:
DataReader.h
DataReader.cpp
Subscriber.cpp
3.3 执行命令,生成项目文件:
perl %ACE_ROOT%\MPC\mwc.pl -type vs2017 -include %DDS_ROOT%\MPC\config
这个时候就可以在目录里看到OpenDDSPing.sln了,
备注一下:各个VC版本:
Visual Studio 6 : vc6
Visual Studio 2003 : vc7
Visual Studio 2005 : vc8
Visual Studio 2008 : vc9
Visual Studio 2010 : vc10
Visual Studio 2012 : vc11
Visual Studio 2013 : vc12
Visual Studio 2015 : vc14
Visual Studio 2017 : vs2017
3.4 生成代码文件,
打开OpenDDSPing.sln,生成IDL项目部分就可以,比手动运行好多了。
3.5 接下来就要完善代码了,见我的资源下载部分
附录:示例项目
https://download.csdn.net/download/robinfoxnan/12821698