会话 API
功能概览
| 类别 | 属性 | 类型 | 访问 | 说明 |
|---|---|---|---|---|
| 元信息 | darra_session_meta_json | int32_t | 查询 | 会话元信息 JSON;用完 darra_string_free |
| 关闭 | darra_session_close | void | 释放 | 关闭会话;nullptr 安全;禁止与在飞调用并发 |
元信息
darra_session_meta_json()
int32_t darra_session_meta_json(darra_session* session, char** out_json);
读会话元信息。内容:task / labels / 输入宽高与通道 / Layout / Mean / Std / PayloadKind / 实际选中的 Provider / 是否加密 / 授权摘要(去敏,含试用剩余次数)。全部来自容器头或明文探测,用户零配置。 头里缺的字段派生 JSON 里为 null / 缺席,不编默认 640/80/17。
payloadKind 取值含 onnx / trt-engine / openvino / rknn / paddle(运行时载荷)。Windows 上 rknn 打不开会话,不会进到本函数。
调用代价:读会话缓存的头信息,微秒级。schema 见 类型。
参数:
session(darra_session*) — 已打开的会话out_json(char**) — SDK 分配的 UTF-8 JSON,用完darra_string_free
返回值:
int32_t—DARRA_OK成功;DARRA_INTERNAL(nullptr句柄等契约违反)
示例:
char* meta = nullptr;
int32_t rc = darra_session_meta_json(session, &meta);
if (rc == DARRA_OK) {
std::printf("%s\n", meta);
darra_string_free(meta);
}
关闭
darra_session_close()
void darra_session_close(darra_session* session);
关闭会话并释放全部资源(含解密明文窗口清零)。nullptr 安全。close 后句柄失效,再用 = 未定义行为;禁止与任何在飞调用并发。
参数:
session(darra_session*) — 会话句柄;nullptr为 no-op
示例:
darra_session_close(session);
session = nullptr;
完整示例
#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() {
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);
char* meta = nullptr;
rc = darra_session_meta_json(session, &meta);
if (rc != DARRA_OK) {
darra_session_close(session);
return fail("darra_session_meta_json", rc);
}
std::printf("[meta] %s\n", meta);
darra_string_free(meta);
darra_session_close(session);
return 0;
}