从C代码调用Objective-C方法

时间:2013-07-11 13:45:34

标签: objective-c c

我正在尝试从C代码调用Obj-C中实现的方法,如下所示:

// MainViewController.m

- (void)Test
{
    [self outputLine:@"Called from MyCode.c"];
}
.
.
.
cFunc(id param);
.
.
.

// MyCode.c

void cFunc(id param)
{
    [param Test]; // compilation error: Parse issue: Expected expression
}

我想这是因为MainViewController没有在MyCode.c中声明,但是当我#include MainViewController.h时,我得到了大量的其他错误,这表明我完全错了...... 我该如何正确处理?

TIA

3 个答案:

答案 0 :(得分:4)

您应该将MyCode.c文件编译为Objective-C。 Objective-C是C的超集,但反之则并非如此。如果您打算将它编译为C,则不能将Objective-C代码穿插在您的“纯C”代码中。

答案 1 :(得分:0)

检查:using objc_msgSend to call a Objective C function with named arguments

void cFunc(id param) {
    objc_msgSend(param, sel_getUid("Test"));
}

但是,根据上面的链接,如果您的参数不适合寄存器(即浮点数,结构,等等),这有几个原因是危险的。

接受的方法是施放objc_msgSend:

void cFunc(id param) {
    // Now let's pretend that you want to send someFloat to your method

    void (*objc_msgSendTyped)(id self, SEL _cmd, float bar) = (void*)objc_msgSend;

    float someFloat = 42.f;
    objc_msgSendTyped(param, sel_getUid("Test"), someFloat);
}

答案 2 :(得分:0)

只需将myCode.c更改为myCode.m:P

不要害怕将C代码放在Objective-C文件中。