c++ - 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()
推荐阅读
- python - 使用 nvprof 分析 Tensorflow 代码时如何捕获 GPU 数据?
- java - Spring Boot 序列化 JSON
- php - 对多维数组中的行进行分组并对每组中的“计数”元素求和
- java - 尝试在空对象引用上调用虚拟方法“void android.widget.EditText.addTextChangedListener(android.text.TextWatcher)”
- javascript - 如何将具有公共属性的javascript数组合并为一个数组?
- r - rdflib::as_rdf 只识别一些 IRI
- oracle - 在命令窗口中将行大小设置为假脱机
- python - 如何以 csv 格式显示文件名
- sql-server-2016 - SQL Server 从 JSON 中提取第一个数组元素
- node.js - 有没有办法将参数传递给 google bigquery 以在其“IN”函数中使用