纯C函数调用Objective-C方法?

时间:2013-12-06 08:09:37

标签: objective-c c function methods

好的,我已经阅读了关于这个主题的六个主题,但没有一个解决方案能够满足确切的需求。

问题:

Pure C(.c)函数如何在Pure Objective-C(.m)类中调用方法?

每个示例/答案都是在Objective-C(.m)方法中使用C.我有一个Pure C库,我必须创建一个模拟器,所以我需要将我的内核保持在纯C中并调用Objective-C中的更高级别的仿真方法。

我创建引用并调用方法的任何尝试都会失败。方括号表示法也失败了。在Obj-C中创建全局变量并尝试在Pure-C中使用它不起作用,就好像命名空间是隔离的一样。

有人这样做过吗?

以下是流程图:

Obj-C UIButton CLICKED->调用Obj-C方法 - >调用C函数 - >调用Obj-C方法

3 个答案:

答案 0 :(得分:3)

经过多次实验,我发现解决问题的最优雅方法是使用.m后缀将我的核心C库转换为NSObject。来回呼叫的方法立即得到解决。这个改变会改变我原来的库,但是这么少,它是可管理的。所以要审查:

我的原始C文件已重命名为使用.m后缀。然后我添加了

@interface myCLibrary : NSObject

@end

到我的.h文件,并添加到我以前的.c文件中,现在重命名为.m。

@implementation myCLibrary

@end

请记住,C函数不会粘贴在它们下面的这些接口/实现声明之间。只有Objective-C才能进入这些陈述。一旦我这样做,调用C函数,并调用BACK到其他C函数效果很好。

感谢所有的帮助。

答案 1 :(得分:1)

Objective C可以编译c方法而无需任何修改。要从objective-c类调用c方法,你必须在c中做任何事情,只需包含头文件然后直接调用方法。假设您有一个名为test.h的C标头,并且您有一个方法sum(int i, int j);,那么首先包含test.h,然后调用test(1, 2);

如果要调用C ++方法,请按照与上述相同的方式使用Objective-C ++(.mm扩展名)。

答案 2 :(得分:0)

我希望我理解正确!

您可以通过回调函数来完成此操作。

在你的C文件中使用:

定义回调类型

eventcallback g_callback;

实现callback-class(由objective-c代码执行)

void comm_set_callback(eventcallback callback){
   g_callback = callback;
}

在objective-c中:

设置回调(即:在viewDidLoad()中)

comm_set_callback(&testfkt);

从外部C函数调用的C方法

void testfkt(){
 [refToSelf testmethod];
}

从C-Method testfkt调用的Objective-C方法

-(void)testmethod{
   ...
}