1

我在 C 中有一个回调函数,如下所示:

 void cfunc(char* labelUpdateText)

这个回调函数应该通过将标签的当前文本更改为 labelUpdateText 来更新我的应用程序 UI 中的标签文本。

所以在 cfunc 我试图调用这个Objective C函数:

-(void)updateLabel:(char*) text
{
    [_labelProp setStringValue:[NSString stringWithFormat:@"%@", [NSString stringWithUTF8String:text]]];
}

但是,我不能从我的 C 函数调用目标 C 函数。

我试过这样:

updateLabel:labelUpdateText

但是当我构建代码时,我收到警告“未使用的表达式结果”

并且 'updateLabel:labelUpdateText' 不执行。

我究竟做错了什么?

PS:我是Objective C的新手!

4

2 回答 2

3

您需要为回调函数提供一个指向包含标签的视图的指针以及一些更新它的方法。所有回调函数都应该有某种上下文指针,它可以保存允许它们执行上下文特定操作的信息。如果您无法更改回调函数语义,那么恐怕您会被卡住,但是如果可以,请执行以下操作:

void cfunc(const char *labelUpdateText, void *contextInfo) {
    YourView *view = (YourView *)contextInfo;
    [view updateLabelWithText:[NSString stringWithUTF8String:labelUpdateText]];
}

您将需要提供该updateLabelWithText方法YourView,如果您使用的是 ARC,那么在转换过程中也需要做一些桥接contextInfo(尽管编译器会帮助您)。

于 2013-10-29T16:54:29.640 回答
0

为什么不在调用 ObjC 语法的 Objective C 类中创建一个包装 C 函数,并从需要进行回调的 C 程序中调用 C 函数。

于 2013-11-03T00:29:02.363 回答