通过字符串参数从Swift到OBJ C 传递功能指针
Passing function pointer with string parameter from Swift to Obj C++
我当前正在拨打我的C 动态库中的函数,该库需要一个函数指针,其中该函数指针具有指向字符串的指针的参数,从我建造的快速测试线束中。我觉得我在测试安全带中的OBJ C 标头中声明的功能要么不正确,要么我在Swift中不正确地格式化了呼叫。
我的OBJ C 库中的标题(实现在我的.mm文件中):
@interface Objective_CPP : NSObject
- (void)InitCppDriver:(customCallbackType)readCompleteCallback;
@end
相应的文件我的桥接标头链接到我的测试线束(不确定这是否等于我的库项目中的声明):
@interface Objective_CPP : NSObject
- (void) InitCppDriver:(void (*)(const wchar_t* data))readCompleteCallback;
@end
在我的库项目(C )中我的CustomCallbackType声明:
typedef void(*customCallbackType)(const wchar_t* json);
extern customCallbackType frReadCompleteCallback;
我在库中对initcppdriver的实现:
@implementation Objective_CPP
- (void)InitCppDriver:(customCallbackType)readMeterComplCallback
{
...
}
@end
当我在测试安全带中打电话给我的initcppdriver功能时(swift):
var ptrStr: UnsafePointer<wchar_t>?;
Objective_CPP().InitCppDriver(callBack(outString: ptrStr));
...
func callBack (outString:UnsafePointer<wchar_t>?){
//code manipulating string here
}
我尝试通过闭合和许多其他功能定义,但是我最终得到的错误是我尝试过的所有内容的变体:
无法将类型'()'的值转换为预期参数类型 '(@convention(c)(unsafepointer?) -> void)!'
我已经能够成功地调用我的initcppdriver函数,而无需将功能指针传递到其中的参数,但是我似乎无法弄清楚如何使用功能指针参数来调用相同函数的语法/设置。关于如何做到这一点的任何见解都会很棒 - 我不经常在OBJ -C或Swift中工作,并且已经陷入困境了很长时间了。
如果我可以给出任何其他上下文,我很乐意发布更多代码。
谢谢!
您正在调用回调,并尝试将返回值(即()
)传递给C 函数。您应该只是说Objective_CPP().InitCppDriver(callBack(outString:))
。
相关文章:
- 如何定义和设置指向模板类方法的功能指针
- 将状态传递给功能指针
- 如何使用结构内的功能指针调用私有函数
- 功能指针不起作用(C )
- 将C 方法作为功能指针传递
- 优化调用一系列功能指针
- C 功能指针和成员功能指针
- 当直接分配时,为什么此功能指针分配起作用,而不是与有条件的操作员一起使用
- 功能指针的静态初始化
- 功能指针参数参数转换为const
- 使用lambda在功能指针铸造时双免费
- 如何在两个类之间使用功能指针
- exc_bad_access on for loop(数组功能指针)
- 如何通过功能指针调用派生方法
- 虚拟功能指针指向派生类中的函数
- C :铸造成员功能指针
- 指向成员功能的功能指针
- 正确施放以指向返回功能的函数的功能指针
- 当用作模板参数时,功能指针是否需要指向具有外部链接的函数
- 在堆中创建功能指针的数组