打开会话
打开加密容器或明文模型建会话。四个入口同一推理路径;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_open | int32_t | 过程 | 打开 .darmodel(options = nullptr) |
darra_session_open_ex | int32_t | 过程 | 打开 .darmodel,带 darra_session_options | |
| 明文模型 | darra_session_open_plain | int32_t | 过程 | 打开明文 .onnx / .pdmodel / 目录 |
darra_session_open_plain_ex | int32_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*) —.darmkey;nullptr= 走密码 / 试用通道password_or_null(const char*) — 永久密码;nullptr= 走授权文件 / 试用通道。两个通道至少给一个;都给则 key 文件优先验票prefer_provider_or_null(const char*) — 指名 Provider;nullptr= 自动选。指名但不可用 = fail-closedout(darra_session**) — 成功时*out拿到会话;失败时*out == nullptr
返回值:
int32_t—DARRA_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_t—DARRA_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_PAYLOADprefer_provider_or_null(const char*) — 指名 Provider;nullptr= 自动选out(darra_session**) — 成功时*out拿到会话;失败时*out == nullptr
返回值:
int32_t—DARRA_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_t—DARRA_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;
}