如何将 Objective-C 函数作为回调传递给 C 函数?

2023-12-04

我想从 Objective-C 调用 C 函数并将 Objective-C 函数作为回调传递

问题是这个函数有一个回调作为参数,所以我必须将 Objective-C 函数作为回调传递给 c 函数

这是c函数的头文件

        struct mg_context *mg_start(const struct mg_callbacks *callbacks,
                        void *user_data,
                        const char **configuration_options);

这是我尝试称呼它的地方

- (void)serverstarted
{
    NSLog(@"server started");
}


- (IBAction)startserver:(id)sender {
   NSLog(@"server should start");
   const char *options[] =
   {
       "document_root", "www",
       "listening_ports", "8080",
        NULL
   };
   mg_start(serverstarted(), NULL, options);
  }

我尝试了几种方法来做到这一点,并在网上搜索以获取如何做到这一点的线索,但运气不佳

这是我在代码中包含的库

https://github.com/valenok/mongoose


你的主要问题是第一个参数mg_start(),在声明中描述为const struct mg_callbacks *callbacks。您正在尝试将指针传递给函数。 (实际上,您正试图将调用的结果传递给该函数,这甚至离目标更远。)这不是它所说的:它说的是一个指向struct(特别是,一个mg_callbacks结构)。

示例代码位于https://github.com/valenok/mongoose/blob/master/examples/hello.c向您展示如何配置此结构。您必须创建结构并将回调函数的指针放入其中。然后传递该结构的地址。

您的代码的其他问题:您的回调函数本身都是错误的:

- (void)serverstarted
{
    NSLog(@"server started");
}

这里需要的是一个如下声明的 C 函数:int begin_request_handler(struct mg_connection *conn),也就是说,它以一个指向mg_connection结构。你的serverstarted不仅不接受该参数,它甚至不是 C 函数!这是一种 Objective-C 方法,一种完全不同的动物。您在标题和问题中使用的术语“Objective-C 函数”具有误导性; C 有函数,Objective-C 有方法。您将在此处编写的代码中不会使用 Objective-C。

我建议你在这里做的是复制hello.c例子奴性地首先。然后慢慢地、一点一点地修改事物的内容/名称,将其进化为自己的代码。当然学习C也会有帮助,但是你可能只需要仔细复制就可以了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Objective-C 函数作为回调传递给 C 函数? 的相关文章

  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • 强制初始化模板类的静态数据成员

    关于模板类的静态数据成员未初始化存在一些问题 不幸的是 这些都没有能够帮助我解决我的具体问题的答案 我有一个模板类 它有一个静态数据成员 必须为特定类型显式实例化 即必须专门化 如果不是这种情况 使用不同的模板函数应该会导致链接器错误 这是
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 如何在 C# Designer.cs 代码中使用常量字符串?

    如何在 designer cs 文件中引用常量字符串 一个直接的答案是在我的 cs 文件中创建一个私有字符串变量 然后编辑 Designer cs 文件以使用此变量 而不是对字符串进行硬编码 但设计者不喜欢这样抛出错误 我明白为什么这行不通
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • Eclipse 在 Android SDK 内容加载器处挂起

    我已经在 OS X 10 8 2 上使用 Eclipse 4 2 Juno 版本 20120920 0800 几个星期了 为 Android 3 0 及更高版本构建应用程序 我有一台带 SSD 的四核 i7 MacBook Pro 因此性能
  • 如何从第二个视图弹回到根视图?

    我使用 2 将 3 个视图 根视图 第 1 个视图 第 2 个视图 连接在一起modal在 Apple Watch 故事板中继续 1 在根视图中 按下 保存 按钮后 将显示第一个模态视图 2 在第一模态视图中 一旦按下 500 按钮 将显示
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • Python 声音(“铃声”)

    我想让一个 python 程序在完成任务时通过发出嘟嘟声来提醒我 目前 我使用import os然后使用命令行语音程序说 进程完成 我更愿意它是一个简单的 铃 我知道有一个函数可以用于Cocoa apps NSBeep 但我认为这与此没有太
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • dispatch_semaphore_t 重用 - 我在这里缺少什么?

    我有一些代码 其中使用dispatch semaphore t 来表示操作完成 当信号量是成员变量时 它的行为似乎不正确 我将展示有效的示例代码和似乎无效的示例代码 implementation someClass dispatch sem
  • 获取所有ios应用程序的全局列表[重复]

    这个问题在这里已经有答案了 我想对苹果应用商店进行一些全球统计 一个瓶颈是至少获取所有当前活动应用程序的 ID 这 9 位数字 有谁知道如何获取 iOS 应用商店中当前活动应用程序的所有 id 的完整列表 更好的是特定类别的所有 ID 例如
  • C++ 对象用 new 创建,用 free() 销毁;这有多糟糕?

    我正在修改一个相对较大的 C 程序 不幸的是 并不总是清楚我之前的人使用的是 C 还是 C 语法 这是在一所大学的电气工程系 我们 EE 总是想用 C 来做所有事情 不幸的是 在这种情况下 人们实际上可以逃脱惩罚 但是 如果有人创建一个对象
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • 无法将字符串文字分配给装箱的 std::string 向量

    这是我的类型系统的简化版本 include
  • 我可以使用 lambda 函数或 std::function 对象来代替函数指针吗?

    我有一个需要使用的库 它定义了以下内容 typedef void CallbackFunction const int i 并且有一个注册回调的函数 如下所示 void registerCallback CallbackFunction p
  • 当用户更改 Windows 中的语言键盘布局时如何通知?

    I want to show a message to user when the user changes the language keyboard layout of Windows for example from EN to FR

随机推荐

  • 在 iOS 6 中使用 SLRequest 与 Facebook

    我目前正在尝试使用 SLRequest 在 facebook 上发布状态 这是我的代码 ACAccountStore accountStore ACAccountStore alloc init ACAccountType accountT
  • 保存 html 画布图像

    我知道这个问题可能已经有了答案 但我还没有找到它 而且我的项目有一个截止日期 所以我制作了一个 html5 画布 我希望能够用一个 或多个 按钮做两件事 我希望用户能够通过单击 保存 按钮来保存他刚刚完成的操作 理想情况下我希望下载图像 而
  • C# 相当于 C 的 fread 文件 i/o

    谁能告诉我如何在 C NET 版本 2 中以直接方式将字节数组放入结构中 就像熟悉的fread正如在 C 中所发现的 到目前为止 我在读取字节流和自动填充结构方面还没有取得太大成功 我见过一些实现 其中托管代码中存在指针骗局 方法是使用un
  • CSS 和 Javascript 不渲染 404 错误 spring-boot

    这是我正在使用的路径的片段
  • 如何在 Excel 操作窗格中使用 WPF 控件?

    有几个资源解释了如何添加WinForms控件到 Excel 看这两个 http msdn microsoft com en us library vstudio e3zbk0hz 28v vs 100 29 aspx http www cl
  • 在 Win7 中使用 MinGW 中的 pthreads

    2015年1月20日 我在Win7中使用MinGW 尝试使用MinGW和Pthreads编译我的源代码 MinGW已经支持POSIX线程 在 MinGW安装管理器 中 我们可以安装pthreads开发包和pthreads lib 但是当我编
  • 在Python中,命令行参数无需导入?

    在Python中 是否可以在不导入sys 或任何其他模块 的情况下获取命令行参数 是的 如果您使用的是 Linux 如果您知道进程 ID 则可以读取它 proc pid cmdline文件 其中包含以 null 分隔的命令行参数列表 PRO
  • VBA Excel 变量对多个键/顺序进行排序

    如何同时对多个列 键 订单 进行排序 当我运行下面的代码时 它会在执行每一行时对数据重新排序 而不是在排序中对多列进行排序 将 密钥 或 订单 编号从 1 更改为 2 等没有帮助 谢谢 wsLast Row Cells Rows Count
  • javascript数组的总和返回所有数字的字符串连接[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 我有一个由 ajax 获取的 php json encode 对象 我想做的就是对这个数组求和 这是我到目前为止所做的 var json parseJSON data var
  • 如何在Tensorflow中设置分层学习率?

    我想知道是否有一种方法可以像 Caffe 中那样对不同层使用不同的学习率 我正在尝试修改预先训练的模型并将其用于其他任务 我想要的是加快新添加层的训练速度 并将训练后的层保持在较低的学习率 以防止它们被扭曲 例如 我有一个 5 卷积层的预训
  • 当服务打开时,如何强制应用程序选择退出省电模式?

    预期的行为是应用程序在处于开启状态时将始终运行 当应用程序一段时间不活动时 某些手机会将应用程序置于后台模式 我希望应用程序始终运行 即使处于待机模式 待机模式意味着当我们按下主页按钮时 应用程序将进入后台 并且它将运行一段时间 我找到了以
  • 配置按键重复延迟以检测按键是否被按下

    我正在用 C 语言编写一个程序 它使用 ncurses 来检查是否按下了某个键 问题是按键重复有延迟 例如 如果我在终端中按住 a 键 则在重复输入 a 之前会有短暂的延迟 我希望能够知道它是否是从实际按下的位置按下的 在终端中如何暂时将此
  • opengles 在 iPhone 中显示人脸

    我需要将人类 2D 脸部制作为 3D 脸部 我用了这个链接加载 obj 文件并映射纹理 此示例仅适用于立方体和金字塔 我加载了人脸 obj 文件 This loads the obj file and can get the human f
  • Spring 对每个未经授权的 HTTP POST 返回 HTTP 405

    Spring 似乎没有正确路由 授权 HTTP POST 请求 当我发送 HTTP POST 请求时 我总是收到 405 Method Not allowed 响应 并在日志文件中显示 org springframework web ser
  • Jquery 数据表排序不适用于日期列?

    我有一个 jquery 数据表 其中日期列格式为 2018 年 2 月 16 日 但是当它排序时 它没有正确排序 我已经使用了提到的所有与日期相关的列类型Here 但似乎没有任何作用 我该如何解决 这是代码 div class panel
  • 列表追加到 pandas 单元格中

    我有一个数据框 其中包含列中的列表项 例子 df column1 column2 column3 1 c d 2 x 3 foo car 所以我想将另一个项目附加到第3列中 结果应该是这样的 column1 column2 column3
  • 如何使用 SimpleXML 解析 XML 并忽略错误

    我的 xml 文档经常包含错误 无论如何 我想解析我的文档直至出现错误或尝试自动修复错误 那可能吗 我已经尝试过这个 但它不起作用 xml simplexml load file url SimpleXMLElement array LIB
  • 基本矩阵的投影矩阵

    我已经获得了两个摄像机之间的基本矩阵 我也有他们的内部参数3 X 3我之前通过棋盘获得的矩阵 使用基本矩阵 我得到了P1 and P2 by P1 I 0 and P2 e x F e 这些投影矩阵对于获取精确的 3D 位置并没有真正的用处
  • 使用 python-pptx 从现有图表中读取图表数据

    我想使用 python pptx 库从演示文稿中的图表中读取数据 我已经看过替换图表数据的文档 但我不知道如何读取数据 图表数据为 图表的图表类型 它的类别名称 以及可能的层次结构 它的系列名称 及其系列值 这些可在绘图级别使用 例如 gt
  • 如何将 Objective-C 函数作为回调传递给 C 函数?

    我想从 Objective C 调用 C 函数并将 Objective C 函数作为回调传递 问题是这个函数有一个回调作为参数 所以我必须将 Objective C 函数作为回调传递给 c 函数 这是c函数的头文件 struct mg co