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