版本与诊断
版本核对、本机诊断、SDK 堆字符串释放。包管理见 运行时包。
版本
darra_version()
uint32_t darra_version(void);
返回打包版本 major*65536 + minor*256 + patch。用 DARRA_VERSION_DECODE_* 宏拆。不会失败,无错误槽改动。
返回值:
uint32_t— 打包版本
示例:
if (DARRA_VERSION_DECODE_MAJOR(darra_version()) != DARRA_VERSION_MAJOR) {
fprintf(stderr, "ABI 不匹配: 头=%d 库=%s\n", DARRA_VERSION_MAJOR, darra_version_string());
return 1;
}
darra_version_string()
const char* darra_version_string(void);
返回形如 "1.0.0+runtime" / "1.0.0+authoring" 的静态字符串。生命周期 = 进程,禁止释放。客户机上必须看到 +runtime。公开 runtime 包没有 authoring 符号。
返回值:
const char*— 静态字符串,禁止darra_string_free
诊断
darra_diag_collect()
int32_t darra_diag_collect(char** out_json);
采集本机环境诊断,输出统一 JSON。覆盖:os/arch、CPU、GPU 型号 + 驱动版本 + CUDA 上限、已装 Provider 及版本、授权状态(去敏:绝不含密钥 / 密码 / token / 机器指纹字节)、最近错误环形缓冲(去敏)。
尽力而为:单个字段采不到时 JSON 中该字段为 null 或缺席,整体不失败;只有彻底无法采集才返回 DARRA_INTERNAL。
备注
可能触发 WMI / NVML / sysfs 查询,耗时可到数百毫秒——禁止在 PLC 扫描周期等实时路径调用。
参数:
out_json(char**) — SDK 分配的 UTF-8 JSON,用完darra_string_free
返回值:
int32_t—DARRA_OK/DARRA_INTERNAL
示例:
char* diag = NULL;
if (darra_diag_collect(&diag) == DARRA_OK) {
puts(diag);
darra_string_free(diag);
}
相关结构:
字段形态示例(具体型号 / 版本随本机变化;采不到的字段为 null 或缺席):
{
"schema": 1,
"sdk": { "version": "1.0.0+runtime", "abi": 65536 },
"os": { "name": "windows", "version": "10.0.26100", "arch": "x64" },
"cpu": { "model": "...", "cores": 0 },
"gpus": [ { "model": "...", "driver": "...", "cudaMax": "..." } ],
"providers": [ { "id": "onnx-cpu", "version": "1.0.0", "path": "..." } ],
"license": { "present": true, "mode": "trial", "trialRemaining": 0, "machineBound": false },
"recentErrors": [ { "code": 11, "message": "...", "when": "..." } ]
}
schema恒存在;其余字段采不到时为null或缺席,消费方必须容忍。- 去敏:永不出现密钥 / 密码 / token / 机器指纹原始字节;
license只有状态摘要。 gpus无独显时为[];providers未装任何包时为[]。abi为darra_version()的打包值:major*65536 + minor*256 + patch。v1.0.0 即65536。
字符串
darra_string_free()
void darra_string_free(char* s);
释放 SDK 返回的堆字符串(char** 出参:diag / meta / infer 结果)。NULL 安全;重复释放 = 未定义行为。禁止 free() / delete[] / 跨 CRT 堆释放。darra_version_string() 是静态串,禁止释放。
参数:
s(char*) — SDK 分配的堆字符串;NULL 安全
示例:
char* json = NULL;
if (darra_session_meta_json(s, &json) == DARRA_OK) {
puts(json);
darra_string_free(json);
}