ahm*_*med 3 c macos cocoa objective-c ios
我想从objective-c调用ac函数并将objective-c函数作为回调传递
问题是这个函数有一个回调作为参数,所以我必须将objective-c函数作为回调函数传递给c函数
这是c函数的标题
struct mg_context *mg_start(const struct mg_callbacks *callbacks,
void *user_data,
const char **configuration_options);
Run Code Online (Sandbox Code Playgroud)
这是我试图称之为的地方
- (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);
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几种方法来搜索网页,只是想知道如何做到这一点,但没有运气
这是我在代码中包含的库
你的主要问题是第一个参数mg_start(),在声明中描述为const struct mg_callbacks *callbacks.您正在尝试传递指向函数的指针.(实际上你试图将调用的结果传递给该函数,这更远离标记.)这不是它所说的:它表示指向结构的指针(特别是mg_callbacks结构).
https://github.com/valenok/mongoose/blob/master/examples/hello.c上的示例代码向您展示了如何配置此结构.您必须创建结构并将指针放入其中的回调函数.然后传递该结构的地址.
您的代码的其他问题:您的回调函数本身都是错误的:
- (void)serverstarted
{
NSLog(@"server started");
}
Run Code Online (Sandbox Code Playgroud)
这里需要的是一个像这样声明的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也会有所帮助,但你可以通过仔细复制来获得.
| 归档时间: |
|
| 查看次数: |
2291 次 |
| 最近记录: |