在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