跳到主要内容

C

C ABI 内核(darra_ai.h + DarraAI.Core)。全部推理唯一入口:

会话:darra_session_open / open_plain  →  darra_session_infer_image  →  darra_session_close
池: darra_pool_open / open_plain → darra_pool_submit → darra_pool_wait → darra_pool_close

GUI、PLC、客户应用同一路径,无第二套。权威契约 = darra_ai.h,语义冲突以头文件为准。

公开 runtime 构建只含解密、验票、推理分发、诊断、运行时包管理;物理上没有 darra_encrypt_ / darra_issue_ / darra_fingerprint_ 符号。

当前版本

本文档对应 C SDK v1.0.0(与 darra_ai.hDARRA_VERSION_MAJOR/MINOR/PATCH 同一组数字)。加载后第一件事核对 ABI:DARRA_VERSION_DECODE_MAJOR(darra_version()) == DARRA_VERSION_MAJOR,不等 = 装错了库,禁止继续。运行时字符串用 darra_version_string(),客户机必须看到 1.0.0+runtime

相关页面

安装

下载页面 获取内核包或 darra-ai-c-sdk.zip(头文件 + import lib + 示例)。

包:darra-ai-core-windows-x64.zipDarraAI.Core.dlldarra_ai.h、import lib、darra-selftest)。

cl /utf-8 /Fe:my_app.exe main.c DarraAI.Core.lib /I include

运行目录必须带 DarraAI.Core.dll。MSVC 消费方加 /utf-8(头文件 UTF-8 无 BOM,注释全中文)。

#include "darra_ai.h"

只交付 x64 / ARM64,两平台均单调用约定,无 __stdcall 变体。

环境要求

项目要求
操作系统Windows x64 / Linux x86_64 / Linux ARM64(RK3588)。macOS 不在 v1
编译器MSVC(/utf-8)/ GCC / Clang,C11 或更高
头文件darra_ai.h
运行库Windows:DarraAI.Core.dll;Linux:libCore.so
权限装运行时包到系统目录时可能需要管理员;SDK 不代装 NVIDIA / RK3588 NPU 等系统驱动
重依赖ORT / CUDA / TensorRT / OpenVINO 等依赖由 Studio 或部署人员提前部署为 Provider;SDK 打开模型不下载或安装
诚实边界
  1. 不承诺 dump 免疫。 授权机 + 管理员级调试器在会话存活期暂停 dump,挡不住。本 SDK 防的是静态拷走、转发、无授权运行、常规 dump 工具、逆向授权算法。
  2. 加密单向。 官方不提供解回明文的通道。永久密码只用于无限次推理。
  3. 环境提前部署。 SDK 只验证和加载本地 Provider;下载、安装与系统驱动由 Studio 或部署流程处理,darra_diag_collect 提供只读诊断。
  4. macOS 不在 v1。 不是「即将支持」。
  5. Windows 无 RKNN。 rknn 载荷只在 linux-arm64 板端运行;Windows 收到即 DARRA_UNSUPPORTED_PAYLOAD
  6. 不承诺硬实时。 推理是阻塞调用。PLC 侧必须在扫描周期外进程 / 线程调用。
  7. 诊断 JSON 不含密钥 / 密码 / token / 机器指纹字节。

快速开始

生产路径:加密容器

客户现场加载 .darmodel(新分发钥匙内嵌,key_path 传 NULL)。导出格式即加载格式,用户零配置。打开前用 darra_session_unlock_info 决定要不要一次激活码。

#include <stdio.h>
#include "darra_ai.h"

int main(void) {
if (DARRA_VERSION_DECODE_MAJOR(darra_version()) != DARRA_VERSION_MAJOR) {
fprintf(stderr, "ABI 不匹配: %s\n", darra_version_string());
return 1;
}

darra_session* s = NULL;
int32_t rc = darra_session_open("model.darmodel", NULL, NULL, NULL, &s);
if (rc != DARRA_OK) {
darra_error_t err; err.size = sizeof(err);
darra_last_error(&err);
fprintf(stderr, "[%d] %s\n建议: %s\n", err.code, err.message, err.hint);
return (int)rc;
}

/* 读图、填 darra_image_desc、darra_session_infer_image — 见「推理」页 */

darra_session_close(s);
return 0;
}

对应包未部署时返回缺包错误,请先准备环境再重试。环境准备的进度在 Studio 右上角下载中心查看。失败码与 hint 见 错误码

明文模型(Studio 试跑 / 客户自有无需加密模型)与加密入口同一推理路径,只跳过容器解码与验票:

darra_session* s = NULL;
int32_t rc = darra_session_open_plain("model.onnx", NULL, &s);

open_plain 的路径可以是 .onnx.pdmodel(同目录须有 .pdiparams)、或含二者的目录。Paddle 是运行时载荷(PayloadKind=paddle)。.pt / .pth 仍拒,返回 DARRA_UNSUPPORTED_PAYLOAD

何时用哪种
  • .darmodel + 激活码(未绑机)/ NULL(已绑机) — 生产环境,推荐。
  • darra_session_open_plain — Studio 试跑 / 客户自有明文模型。
  • darra_pool_open — 同模型突发 / 流式;max_workers 硬顶 8。