如何将CFData传递给C char**?

在C中,我需要调用一些Swift代码,该代码接受输入字节数组并生成输出字节数组。

这在桥接报头中:

typedef void (*SwiftFunc)(const uint8_t* input, int inputLen, uint8_t** output, int* outputLen);

extern "C" void CFunc(SwiftFunc swiftFunc);

下面是CFunc的C实现:

void CFunc(SwiftFunc swiftFunc) {
    char* input = "Hello world";
    int inputLen = strlen(input);
    char* output = NULL;
    int outputLen = 0;
    swiftFunc(input, inputLen, &output, &outputLen);
    // do something with the output here
}

这是Swift的代码:

func swiftFunc(
    input: Optional<UnsafePointer<UInt8>>, 
    inputLen: Int32,
    output:Optional<UnsafeMutablePointer<
             Optional<UnsafeMutablePointer<UInt8>>>>, 
    outputLen:Optional<UnsafeMutablePointer<Int32>>) -> Void {

        let cfInput = CFDataCreate(kCFAllocatorDefault, input, CFIndex(inputLen))
        let cfOutput = ... generate the output ...

        How to pass the output buffer back to C?
}

如何将输出缓冲区从Swift传递到C?假设涉及到双指针。

另外,Swift函数签名似乎非常冗长,这是意料之中的吗?我试着用?后缀代替Optional<>,但是编译器不喜欢它。

转载请注明出处:http://www.hnsdbxf.com/article/20230526/1911717.html