制作公司网站教程,东莞网站建设公司,如何做一个移动网站,姜堰网页设计目录 1、安装FastDDS 库2、使用IDL定义自己的数据格式3、生成DLL3.1 托管 #xff08;Managed#xff09;模式3.2 非托管 #xff08;Unmanaged#xff09;模式 -- 可用于Unity 代码示例 eprosima Fast DDS is a C implementation of the DDS (Data Distribution Service) … 目录 1、安装FastDDS 库2、使用IDL定义自己的数据格式3、生成DLL3.1 托管 Managed模式3.2 非托管 Unmanaged模式 -- 可用于Unity 代码示例 eprosima Fast DDS is a C implementation of the DDS (Data Distribution Service) standard of the OMG (Object Management Group). 这里讲讲怎么在C#中也能用上这一能高效通讯的工具
1、安装FastDDS 库
主要参考 Fast DDS documentation 到官网下载界面下载编译好的版本。 也可以下载源代码编译太麻烦没成功这里掠过
填完表格选择 我下载的是2.14.2版本 找到windows安装包
安装完成后会看到\eProsima\fastrtps 2.14.2 文件夹下有这些东西 里面有一些example你可以自己cmake编译测试一下。
2、使用IDL定义自己的数据格式
创建在一个空文件夹里创建一个*.idl文件
下面是一个示例 HelloWorld.idl
struct HelloWorld
{unsigned long long timestamp;octet det_valid[2];float joints[21][3];
};上面分别对应C11的数据格式
uint64_t timestamp;
std::arrayuint8_t,2 det_valid;
std::arraystd::arrayfloat, 3, 21 joints;更多数据格式的对应关系参考: Defining a data type via IDL
现在我们使用Fast DDS-Gen工具基于 HandMessage.idl生成为项目的源代码这是一个十分优雅的设计。
在该文件夹下用VS的命令行窗口系统自带的powershell不一定好使运行如下命令
fastddsgen.bat -example CMake .\HelloWorld.idl理论上fastddsgen.bat已经在你的环境变量里了如果没有将~\eProsima\fastrtps 2.14.2\bin添加到你的环境变量里即可。 现在你会发现多了好多文件 这里利用CMakeLists.txt 编译时有可能出现找不到openssl的情况。 可以参考博客安装 win版的OpenSSL然后在find_package(fastcdr REQUIRED) 前添加你的OpenSSL include目录如 set(OPENSSL_INCLUDE_DIR C:/Program Files/OpenSSL-Win64/include) 其实CMakeLists.txt 中还会有一些诸如库文件路径等的小问题稍微有点功底都能解决这里不再赘述。 编译完成后分别运行 .\HelloWorld.exe subscriber和 .\HelloWorld.exe publisher看到类似下列输出即为成功 其实基于idl生成的核心内容是HelloWorld.h, HelloWorld.cxx, HelloWorldPubSubTypes.h, HelloWorldPubSubTypes.cxx 其他如xPublisher, xSubscriber以及PubSubMain无论用什么idl文件生成的都是类似的内容 根据你的任务需求修改Publisher和Subscriber的数据处理
Publisher修改
void HelloWorldPublisher::run()Subscriber修改
void HelloWorldSubscriber::SubListener::on_data_available(DataReader* reader)我们可以借鉴 HelloWorldPublisher和 HelloWorldSubscriber的写法定义自己的数据处理 也可以写成兼具Publisher和Subscriber的Sever-Client形式就看你的具体任务需求了。 一些参考 关于FastDDS在C#中使用的简单实例 Windows下运行Fast DDS示例程序包含.idl文件的使用方法
3、生成DLL
以上C部分就讲完了数据处理怎么样大家各不相同现在讲C数据处理部分搞定后怎么让C#调用 仅提供一些参考链接涉及非个人权力内容非相关人员不能提供太多东西。 托管DLL和非托管DLL的区别 C#与C代码的互操作方式
这个博客写的很好 vs2019 实现C#调用c的dll两种方法 注意编译形式 Release/Debug 和 平台 x64/x86 的统一 3.1 托管 Managed模式
利用C/CLI项目编译
CLI不会默认勾选需要自行勾选
安装后新建项目即可选择
剩下的可以参考 C#调用C类托管C方式实现创建C CLR dll项目 C# 调用 C DLL(4) 托管方式:需要使用c类 C#如何调用C(进阶篇) 如何用轻松用C#.NET调用自己编写C的CLRDLL类库Visual Studio
3.2 非托管 Unmanaged模式 – 可用于Unity
这部分的简单实现可以参考 C生成dll与C#调用 C# 调用 dll 文件 如何在C#代码中调用C函数 一
适用于FastDDS的样例可参见代码示例
代码示例
仅向相关人员提供生人勿扰。