通过字符串参数从Swift到OBJ C 传递功能指针

Passing function pointer with string parameter from Swift to Obj C++

本文关键字:功能 指针 OBJ 字符串 参数 Swift      更新时间:2023-10-16

我当前正在拨打我的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:))