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