c++ - 纯 C 回调函数指针作为 iPhone 委托(delegate)协议(protocol)的一部分?

标签 c++ objective-c iphone-sdk-3.0 callback

尝试将纯 C/C++ 代码作为外部静态库集成到 iPhone 项目中。到目前为止一切顺利,但现在我陷入困境,我需要注册库回调。当发生某些事情时,库应该通知我的 iPhone 应用程序。似乎是定义委托(delegate)的好地方。

...但是库需要用于回调的 C 函数指针。如何在 Objective-C 中定义它们,如何将它们用作委托(delegate)模式的一部分?

抱歉,实在无法给出示例代码。这里有一些类似的东西:我必须用来注册的第一个接口(interface),然后是回调的定义。

registerCallBack(&aCBack, &bCBack, &cCBack, &dCBack, &eCBack);

typedef void (aCBack)(uint32_t magic);
typedef void (bCBack)(const NewData* newData);
typedef void (cCBack)(uint32_t value, const std::vector<DataStuff*>* stuff);
typedef void (dCBack)(uint32_t value, const SomeData* data, const std::string text, uint32_t type);
typedef void (eCBack)(uint32_t value, const MoreData* more);

...哦,顺便说一句,问题之一是每个 Objective-C 类方法都有两个隐藏参数。完全不知道如何处理。除了更改该外部库的界面。

最佳答案

您需要为回调使用 C++/C 接口(interface),然后在内部将调用委托(delegate)给您的 Objective-C 代码。在回调注册允许您传入足够大小的用户数据的地方,您可以方便地传递一些标识您的上下文的内容,如 this answer .
未通过任何上下文的回调无论如何都必须调用 Objective-C 部分的类方法。

关于c++ - 纯 C 回调函数指针作为 iPhone 委托(delegate)协议(protocol)的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1819562/

相关文章:

iphone - 通过 Storyboard的选项卡栏项目

objective-c - UINavigationController 标题重叠

xcode - 为什么在我的 RootViewController :viewDidLoad method? 之后突然调用我的应用程序委托(delegate)的 didFinishLaunchingWithOptions 方法

iphone - 使用 UIScrollView 生成问题

objective-c - 如何在 Objective-C 应用程序中观察 NSUserDefaults 的命令行更改?

iphone - 添加权利文件时,权利无效 0xE8008016

c++ - 模板类特化来处理它自己的类型

c# - 从 C# 调用 C 函数,传递包含指针的结构

c++ - 如何构造一个带有成员函数的双端队列类? C++

php - 将 libmcrypt 编译为 C++ 库