![]() |
xCore-SDK
0.6.0
xCore SDK C# API
|
C::封装用的是C++/CLI,是用来代替C++托管扩展(Managed C++,下文使用MC++指代)的语言。
和C++类似,在.hpp文件中写函数声明,在.cpp中实现
BaseRobot类,Model类下面的函数, 在 robot_cli.hpp BaseRobot 类下面新增函数声明,在robot_cli.cpp写函数实现Robot_T, Model_T (也就是区分轴数的模板类) 下面的,也在 BaseRobot 类下面新增函数声明,实现时注意判断实际构造的机型,分别用 ir3 ir4 ir6 cobot5 cobot6 cobot7 调用C++函数BaseCobot 下面的,在 robot_cli.hpp Cobot类下面新增函数Cobot 类下面的, 也在Cobot类下面新增。同样地,注意判断实际构造的机型。简单来讲,每个封装函数完成3件事情:
以checkPath函数为例,start_joint 和 targets是传入参数,分别转换成C++中的 std::vector<double> , std::vector<CartesianPosition>
然后调用原始C++函数。
target_joint_calculated 和 ec是传出的参数,分别转换成array<double>^ 和自定义的 ErrorCode
converter_cli.hpp中写了一些常用的转换函数
| C++数据类型 | C++/CLI数据类型 | 转换说明 |
|---|---|---|
| int, double, float,bool | 不需要转换 | |
| uint8_t, unsigned char | Byte | 不需要转换 |
| int8_t, char | SByte | 不需要转换 |
| std::string | System.String^ | 见convertString() |
| std::vector<T>, std::array<T> | array<T>^ | 遍历数组,逐个元素转换 |
注: 早期部分vector转换成了List, 不再建议使用
基本上,自定义的数据类型都定义为引用类型(ref class)。参数类型后面带的 ^ 符号就代表这是一个引用类型。转换方式参考converter_cli.cpp
传入参数无需特殊声明。传出参数有两种标注方式:
%, 比如上方示例里的 array<double>^% target_joint_calculated[Out] 标志,同时加 %, 比如所有的错误码 [Out] ErrorCode^% ec。和上一种的区别是函数实现里要负责创建该参数的对象。比如,每个函数里都会执行这样一行gcnew 就是用于分配内存并创建对象
一般使用第一种方式标注就行
C::中的泛函数和C++中的概念不太一样,所以模板函数要把支持的参数类型都声明定义一遍。参考 writeRegister
每个函数都要在.hpp写函数注释,仿照已有的写就行
1.9.4