![]() |
xCore-SDK
0.5.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写函数注释,仿照已有的写就行