我正在尝试从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
答案 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文件中。