我目前在调用我的C++动态库中的函数的僵局,需要传递函数指针,其中函数指针具有指向一个字符串,来自我构建的Swift测试工具。我有一种感觉,我的测试工具中的Obj C++头部中的函数声明不正确,或者我在Swift中不正确地格式化调用。传递函数指针与字符串参数从Swift到Obj C++
在我的OBJ C++库头(实施是在我的.mm文件):
@interface Objective_CPP : NSObject
- (void)InitCppDriver:(customCallbackType)readCompleteCallback;
@end
相应的文件我的桥接报头链接到我的测试工具(不能确定这是否是等效于声明中我的图书馆项目):
typedef void(*customCallbackType)(const wchar_t* json);
extern customCallbackType frReadCompleteCallback;
:
@interface Objective_CPP : NSObject
- (void) InitCppDriver:(void (*)(const wchar_t* data))readCompleteCallback;
@end
我customCallbackType在我的库项目(C++)声明
我实现我的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工作,现在已经停留了很长时间。
如果有任何其他的情况下,我可以给这个问题,我会很乐意张贴更多的代码。
谢谢!
一个Swift函数没有C函数。 –