首页 > 解决方案 > 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-cpointersreferenceobjective-c++

解决方案


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

推荐阅读