好的,我已经阅读了关于这个主题的六个主题,但没有一个解决方案能够满足确切的需求。
问题:
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方法
答案 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{
...
}