gpt4 book ai didi

ios - 如何将 objective-c 函数作为回调传递给 C 函数?

转载 作者:可可西里 更新时间:2023-11-01 06:25:00 25 4
gpt4 key购买 nike

我想从 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 也有帮助,但您可能只需仔细复制即可。

关于ios - 如何将 objective-c 函数作为回调传递给 C 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16106751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com