对 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] 删除。
我来说两句