我想从 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(使用前将#替换为@)