Obj-c(++) 调用 api 引用指针

Obj-c(++) calling api with reference to a pointer

对 Objective-C/Objective-C++ 很陌生,我正在围绕 C++ 库编写一个包装器。

其中一个函数采用对指针的引用和对 int 的引用来创建缓冲区和 return 它的大小,以这种方式:

int GetData(char*& pcBuffer, int& iBufferSize);

我真的不清楚如何通过 Objective-C/C++

与之交互

到目前为止,我一直在这样写调用

-(int) GetData: (NSString*) pcData
              : (int) iBufferSize;

但是,由于 pcBuffer 引用的指针将由库代码创建和填充,我应该使用什么数据类型?

此外,由于 int 作为引用而不是指针传递,我该如何正确声明它?

对此有任何帮助吗?

C++ 函数可能会分配字符串缓冲区并 return 在第一个参数中设置它,而 return 在第二个参数中设置已分配缓冲区的大小。

您不需要在 Objective-C 端模仿相同的接口,因为您可以使用 returned 缓冲区来实例化 NSString。剩下的就是处理函数的 return 值,我假设它是一个错误代码,以防出现问题:

- (nullable NSString *)getDataWithError:(NSError **)error {
    char *buffer;
    int size;
    int errCode = GetData(buffer, size);
    if (errCode == 0) {
        return [NSString stringWithCString:buffer encoding:NSUTF8StringEncoding];
    } else {
        if (error) {
            *error = [NSError errorWithDomain:MyErrorDomain code: errCode userInfo:nil];
        }
        return nil;
    }
}

作为奖励,由于存在错误报告机制,可以从 swift:

很好地调用上述函数
let value = try MyObject().getData()