我目前处于调用我的C ++动态库中的函数的僵局,该函数需要传递函数指针,其中该函数指针具有指向字符串的指针的参数,来自Swift测试工具I& #39;已建成。我有一种感觉,我的测试工具中的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
当我在我的测试工具(Swift)中调用我的InitCppDriver函数时:
var ptrStr: UnsafePointer<wchar_t>?;
Objective_CPP().InitCppDriver(callBack(outString: ptrStr));
...
func callBack (outString:UnsafePointer<wchar_t>?){
//code manipulating string here
}
我已尝试传递一个闭包和其他一些函数定义,但我最终得到的错误是我尝试的所有内容的变体:
无法转换类型&#39;()&#39;的值预期的参数类型 &#39;(@ convention(c)(UnsafePointer?) - &gt; Void)!&#39;
我已经能够成功调用我的InitCppDriver函数而没有传递函数指针的参数,但我似乎无法弄清楚如何用函数指针调用相同的函数的语法/设置参数。任何关于如何做到这一点的见解都会很棒 - 我不经常在Obj-C或Swift工作,而且现在已经被困在这一段时间了。
如果还有其他任何背景我可以提出这个问题,我会乐意发布更多代码。
谢谢!
答案 0 :(得分:1)
您正在调用回调并尝试将返回值(()
)传递给C ++函数。你应该只说Objective_CPP().InitCppDriver(callBack(outString:))
。