跳到主要内容

打开会话

打开加密容器或明文模型建会话。四个入口同一推理路径;open / open_plain ≡ 对应 *_ex(..., options = nullptr)

打开时按 PayloadKind × 硬件 × prefer_provider 选 Provider;对应包未装则内部调一次 darra_runtime_ensure(无进度回调,可能阻塞下载)。指名但不可用 = fail-closed,绝不静默降级。

Paddle 是运行时载荷(PayloadKind = paddle)。Windows 无 RKNN:rknn 载荷返回 DARRA_UNSUPPORTED_PAYLOAD

提示

选项结构 darra_session_options 定义见 类型。禁止改 Windows ReservedCpuSets,禁止动 PLC 隔离核。

功能概览

类别属性类型访问说明
加密容器darra_session_openint32_t过程打开 .darmodel(options = nullptr)
darra_session_open_exint32_t过程打开 .darmodel,带 darra_session_options
明文模型darra_session_open_plainint32_t过程打开明文 .onnx / .pdmodel / 目录
darra_session_open_plain_exint32_t过程打开明文模型,带 darra_session_options

加密容器

darra_session_open()

int32_t darra_session_open(const char* container_path,
const char* key_path_or_null,
const char* password_or_null,
const char* prefer_provider_or_null,
darra_session** out);

打开加密容器(.darmodel,DARM1)建会话。本函数 ≡ darra_session_open_ex(..., options = nullptr)。全部推理唯一入口——GUI / PLC / 客户应用同一路径。

参数:

  • container_path (const char*) — .darmodel 路径,必填
  • key_path_or_null (const char*) — .darmkeynullptr = 走密码 / 试用通道
  • password_or_null (const char*) — 永久密码;nullptr = 走授权文件 / 试用通道。两个通道至少给一个;都给则 key 文件优先验票
  • prefer_provider_or_null (const char*) — 指名 Provider;nullptr = 自动选。指名但不可用 = fail-closed
  • out (darra_session**) — 成功时 *out 拿到会话;失败时 *out == nullptr

返回值:

  • int32_tDARRA_OK 成功;非 0 = 错误码,细节用 darra_last_error

典型错误:DARRA_IO_NOT_FOUND / DARRA_IO_DENIED / DARRA_BAD_CONTAINER / DARRA_BAD_LICENSE / DARRA_PASSWORD_REQUIRED / DARRA_PASSWORD_WRONG / DARRA_MACHINE_MISMATCH / DARRA_TRIAL_EXHAUSTED / DARRA_UNSUPPORTED_PAYLOAD(含 Windows 上 rknn 载荷)/ DARRA_PROVIDER_MISSING / DARRA_PROVIDER_ABI_MISMATCH / DARRA_HARDWARE_MISSING / DARRA_DRIVER_TOO_OLD / DARRA_NETWORK_FAILED / DARRA_CHECKSUM_MISMATCH / DARRA_CANCELLED(后三码来自内部 ensure)。

示例:

darra_session* s = nullptr;
int32_t rc = darra_session_open("model.darmodel", "model.darmkey",
nullptr, nullptr, &s);
if (rc != DARRA_OK) {
darra_error_t err{};
err.size = sizeof(err);
darra_last_error(&err);
return static_cast<int>(rc);
}

darra_session_open_ex()

int32_t darra_session_open_ex(const char* container_path,
const char* key_path_or_null,
const char* password_or_null,
const char* prefer_provider_or_null,
const darra_session_options* options_or_null,
darra_session** out);

打开加密容器建会话(带选项)。options_or_null == nullptr 时与 darra_session_open 逐字相同。非 nullptr 时须先填 options->size;size 未填 / 线程数为负 = DARRA_INTERNAL

参数:

  • 前四个与 darra_session_open 相同
  • options_or_null (const darra_session_options*) — nullptr = 自动线程、不设亲和。结构见 类型
  • out (darra_session**) — 出参

返回值:

  • int32_tDARRA_OK 成功;非 0 = 错误码

示例:

darra_session_options opt{};
opt.size = sizeof(opt);
opt.intra_op_threads = 2;
opt.inter_op_threads = 1;

darra_session* s = nullptr;
int32_t rc = darra_session_open_ex("model.darmodel", "model.darmkey",
nullptr, nullptr, &opt, &s);

明文模型

darra_session_open_plain()

int32_t darra_session_open_plain(const char* onnx_path,
const char* prefer_provider_or_null,
darra_session** out);

打开明文模型建会话。本函数 ≡ darra_session_open_plain_ex(..., options = nullptr)。与 darra_session_open 同一推理路径,只跳过容器解码与验票。

参数:

  • onnx_path (const char*) — 明文模型路径(历史参数名):.onnx 文件;.pdmodel 文件(同目录须有对应 .pdiparams);含 *.pdmodel + *.pdiparams 的目录。.pt / .pth 仍拒 → DARRA_UNSUPPORTED_PAYLOAD
  • prefer_provider_or_null (const char*) — 指名 Provider;nullptr = 自动选
  • out (darra_session**) — 成功时 *out 拿到会话;失败时 *out == nullptr

返回值:

  • int32_tDARRA_OK 成功;非 0 = 错误码

其余(含内部 ensure、fail-closed、Windows 无 RKNN)同 darra_session_open。Paddle 是运行时载荷(PayloadKind = paddle)。

示例:

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

Paddle 明文:

darra_session* s = nullptr;
int32_t rc = darra_session_open_plain("model.pdmodel", nullptr, &s);

darra_session_open_plain_ex()

int32_t darra_session_open_plain_ex(const char* model_path,
const char* prefer_provider_or_null,
const darra_session_options* options_or_null,
darra_session** out);

打开明文模型建会话(带选项)。model_path.onnx / .pdmodel(伴生 .pdiparams)/ 含二者的目录。.pt / .pth 仍拒。options_or_null == nullptr 时与 darra_session_open_plain 逐字相同。

参数:

  • model_path (const char*) — 明文模型路径
  • prefer_provider_or_null (const char*) — 指名 Provider;nullptr = 自动选
  • options_or_null (const darra_session_options*) — nullptr = 与 open_plain 相同
  • out (darra_session**) — 出参

返回值:

  • int32_tDARRA_OK 成功;非 0 = 错误码

完整示例

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

static int fail(const char* where, int32_t rc) {
darra_error_t err{};
err.size = sizeof(err);
darra_last_error(&err);
std::fprintf(stderr, "%s 失败 [%d] %s\n建议: %s\n",
where, err.code, err.message, err.hint);
return static_cast<int>(rc);
}

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

darra_session* session = nullptr;
int32_t rc = darra_session_open("model.darmodel", "model.darmkey",
nullptr, nullptr, &session);
if (rc != DARRA_OK) return fail("darra_session_open", rc);

darra_session_close(session);
return 0;
}