我目前在调用我的 C++ 动态库中的函数时陷入僵局,该函数需要传递函数指针,其中该函数指针具有指向字符串的指针参数,来 self 的 Swift 测试工具建成。我有一种感觉,要么是我在测试工具中的 Obj C++ header 中的函数声明不正确,要么是我在 Swift 中不正确地格式化了调用。
我的 Obj C++ 库中的 header (实现在我的 .mm 文件中):
@interface Objective_CPP : NSObject
- (void)InitCppDriver:(customCallbackType)readCompleteCallback;
@end
我的桥接 header 链接到我的测试工具中的相应文件(不确定这是否等同于我的库项目中的声明):
@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
}
我已经尝试传递一个闭包和许多其他函数定义,但我最终得到的错误是我尝试过的所有错误的变体:
Cannot convert value of type '()' to expected argument type '(@convention(c) (UnsafePointer?) -> Void)!'
我已经能够在没有将函数指针传递给它的参数的情况下成功调用我的 InitCppDriver 函数,但我似乎无法弄清楚如何使用函数指针参数调用同一函数的语法/设置。任何关于如何做到这一点的见解都会很棒——我不经常在 Obj-C 或 Swift 中工作,现在已经坚持这个太久了。
如果我可以提供任何其他上下文来解决这个问题,我会很乐意发布更多代码。
谢谢!!
最佳答案
您正在调用回调并尝试将返回值(即 ()
)传递给 C++ 函数。您应该只说Objective_CPP().InitCppDriver(callBack(outString:))
。
关于c++ - 将带有字符串参数的函数指针从 Swift 传递到 Obj C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46061804/