Obj-c(++) 参考指针调用 api

西蒙

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

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

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

我真的不清楚如何通过 Objective-C/C++ 与它交互

到现在为止,我一直在写这样的电话

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

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

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

对此有什么帮助吗?

克里斯提克

C++ 函数可能会分配字符串缓冲区并在第一个参数中返回它,同时在第二个参数中返回已分配缓冲区的大小。

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

- (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()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章