API 约定
本文档描述 One SDK 两套接口(C API 和 .NET API)共同遵守的设计约定。
错误模型
C API:返回码
C API 所有 DLL* 函数返回 ErrorCode 枚举值。调用方必须在返回值非 NoError 时进行处理:
ErrorCode err = DLLSysConnect(&handle);
if (err != NoError) {
// 查询详细错误信息
char detail[256];
DLLGetLastCommandDetail(detail, sizeof(detail));
}
.NET API:异常
.NET API 将所有 ErrorCode 映射为 OneException 及其子类,通过 ExceptionResolver 在 P/Invoke 边界自动转换。调用方通过捕获 OneException 处理错误:
try {
controller.Commands.Motion.MoveAbs("X", 10.0, 10.0);
}
catch (OneException ex) {
Console.WriteLine($"控制器错误: {ex.Message}");
}
详见 Exceptions。
句柄模型
C API
DLLSysConnect 通过输出参数 INT_PTR* phClientHandle 返回客户端句柄。该句柄后续用于所有操作,生命周期由调用方管理。DLLSysDisconnect 释放句柄。
.NET API
Controller 门面类内部管理原生句柄,进程级单例 Controller.ConnectedController 持有当前连接实例。调用 Controller.Connect() 建立连接,Controller.Disconnect() 断开并释放资源。
缓冲区 in/out 约定
C API
| 模式 | 约定 |
|---|---|
| 输入(in) | 调用方分配并填充,函数读取后返回 |
| 输出(out) | 调用方分配,* outValue 写入结果;int* inOutCount 同时用于传入缓冲区容量和传出实际写入大小 |
| 字符串 | char* outBuffer, int bufferSize,调用方保证缓冲区足够大 |
.NET API
- 字符串参数直接使用
string/StringBuilder,SDK 内部处理编解码 - 数组参数按 C API 约定,SDK 负责边界检查
平台限制
| 项目 | 说明 |
|---|---|
| 仅 x64 | One SDK 仅支持 Windows x64,不支持 x86 |
连接与寻址
默认地址
控制器默认监听 127.0.0.1:60049(回环地址)。Controller.Connect() 使用该默认地址。
自定义地址与控制器发现
.NET SDK 不提供客户网络配置 API。控制器目标地址与控制器发现由 Setup Manager 应用统一配置:在 Setup Manager 中连接目标控制器后,SDK 进程即可使用默认地址 127.0.0.1:60049 连接。
C/C++ 客户可继续使用 DLLSetControllerAddress / DLLDiscoverControllers(见 C API 参考)。
Controller 单例限制
Controller.Connect() 是进程级单例:同一进程中同时只能有一个活动连接。新调用 Connect 前自动断开旧连接。ConnectedController 静态属性获取当前连接实例。
线程模型
| 约束 | 说明 |
|---|---|
| 线程安全 | SDK 内部通过锁保护共享状态,支持多线程调用不同实例方法 |
| UI 线程 | WPF/WinForms 应用中,UI 线程直接调用 SDK 方法无需切换线程(内部自动 dispatch) |
| 事件 | .NET SDK 当前无公开事件回调;轴故障与运动完成通过状态查询(Commands.Status)获取 |