从 Objective C 调用带有回调的 C++ 方法
Calling C++ method with callback from ObjectiveC
我需要调用 C++ 方法并传入 callback 方法作为参数...来自 ObjectiveC 方法...
这个回调方法将在 ObjectiveC 中被多次触发......因为它是一个回调......所以我需要捕获那个 ObjectiveC 回调方法,因为它将作为闭包从 Swift 代码中调用...... .
这是 C++ 方法签名
static bool cPlusPlusMethodWithCallBack(const std::string& someText, void (*someCallback)(unsigned int) = NULL, unsigned int someNum = 0);
我的问题是在 ObjectiveC 中(在 .mm 和 .h 中)声明的这个回调方法的块语法应该是什么,然后可以作为参数传递给 C++ 中的这个 someCallback
我是一名 Swift 开发人员,所以有点坚持使用 ObjectiveC...非常感谢
您不能像那样将 Objective-C 块(或 Swift 闭包)作为函数指针参数传递。您需要创建一个单独的独立函数,并将其作为回调传入。
void MyCallback(unsigned int value)
{
// ...do something...
}
在你的主要代码中:
cPlusPlusMethodWithCallBack("something", MyCallback);
现在,这样做的缺点是在回调中,您经常需要引用特定的 Objective-C 对象才能正确处理回调。如果您需要此特定回调,则需要将其作为静态变量保存在某处,以便可以从 MyCallback
函数访问它。
或者,如果您可以控制 cPlusPlusMethodWithCallBack
源代码,您可以将其更新为采用 void *
"reference" 参数,然后在您使用时将该参数作为参数提供调用回调:
static void cPlusPlusMethodWithCallback(void (*callback)(void *ref), void *ref)
{
// ...really time consuming processing...
callback(ref);
}
然后,更新您的回调函数:
void MyCallback(void *ref)
{
ObjectiveCObject *obj = (ObjectiveCObject *)ref;
[obj doSomething];
}
而你最初调用该方法时,只要传入你需要的对象作为引用参数即可:
cPlusPlusMethodWithCallback(MyCallback, myObjectiveCObject);
我需要调用 C++ 方法并传入 callback 方法作为参数...来自 ObjectiveC 方法... 这个回调方法将在 ObjectiveC 中被多次触发......因为它是一个回调......所以我需要捕获那个 ObjectiveC 回调方法,因为它将作为闭包从 Swift 代码中调用...... .
这是 C++ 方法签名
static bool cPlusPlusMethodWithCallBack(const std::string& someText, void (*someCallback)(unsigned int) = NULL, unsigned int someNum = 0);
我的问题是在 ObjectiveC 中(在 .mm 和 .h 中)声明的这个回调方法的块语法应该是什么,然后可以作为参数传递给 C++ 中的这个 someCallback
我是一名 Swift 开发人员,所以有点坚持使用 ObjectiveC...非常感谢
您不能像那样将 Objective-C 块(或 Swift 闭包)作为函数指针参数传递。您需要创建一个单独的独立函数,并将其作为回调传入。
void MyCallback(unsigned int value)
{
// ...do something...
}
在你的主要代码中:
cPlusPlusMethodWithCallBack("something", MyCallback);
现在,这样做的缺点是在回调中,您经常需要引用特定的 Objective-C 对象才能正确处理回调。如果您需要此特定回调,则需要将其作为静态变量保存在某处,以便可以从 MyCallback
函数访问它。
或者,如果您可以控制 cPlusPlusMethodWithCallBack
源代码,您可以将其更新为采用 void *
"reference" 参数,然后在您使用时将该参数作为参数提供调用回调:
static void cPlusPlusMethodWithCallback(void (*callback)(void *ref), void *ref)
{
// ...really time consuming processing...
callback(ref);
}
然后,更新您的回调函数:
void MyCallback(void *ref)
{
ObjectiveCObject *obj = (ObjectiveCObject *)ref;
[obj doSomething];
}
而你最初调用该方法时,只要传入你需要的对象作为引用参数即可:
cPlusPlusMethodWithCallback(MyCallback, myObjectiveCObject);