将带有字符串参数的函数指针从Swift传递给Obj C ++

时间:2017-09-05 19:10:18

标签: c++ objective-c swift pointers objective-c++

我目前处于调用我的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工作,而且现在已经被困在这一段时间了。

如果还有其他任何背景我可以提出这个问题,我会乐意发布更多代码。

谢谢!

1 个答案:

答案 0 :(得分:1)

您正在调用回调并尝试将返回值(())传递给C ++函数。你应该只说Objective_CPP().InitCppDriver(callBack(outString:))