如何使用 Zig ABI 处理 C 中的 Zig 错误集

问题描述 投票:0回答:1

我想从 c 调用 Zig 函数,但 fn 返回类型是错误联合

!void
MyType.Error!u32

如何处理错误?

假设我们有以下内容

lib.zig

pub fn errorProneFunction(param1: *Task, param2: u32) Error!u32 {
    return Error.TooManyTasksForLazyMe;
}

我想从c调用函数

type??? my_var = errorProneFunction(&task, 0);
c error-handling abi zig
1个回答
0
投票

如果您想从 C 调用 Zig 函数,则需要将该函数声明为

export
。并且此类函数无法返回错误联合。编译器会给出这样的错误:

src\main.zig:3157:33: error: return type '@typeInfo(@typeInfo(@TypeOf(main.errorProneFunction)).Fn.return_type.?).ErrorUnion.error_set!u32' not allowed in function with calling convention 'C'
export fn errorProneFunction() !u32 {
                                ^~~
© www.soinside.com 2019 - 2024. All rights reserved.