用于c文件的Objective c包装器

时间:2012-11-28 05:44:11

标签: objective-c c ios6 wrapper

我浏览了很多网站,但他们到处都给出了如何编写c ++库的包装器。

现在,我有一个.c文件,我希望将其集成到我的应用程序中。由于Objective c是c的面向对象的扩展,我实际上是否必须为它编写包装器?如果有,该怎么办?如果我没有,那么如何在我的项目中使用c代码?

编辑:确定..我要做的是将文件添加到我的项目中并使用这些功能?究竟怎么做?就像普通的C电话一样?如果我必须传递参数怎么办?

假设我有一个返回字符串的函数,首先我该如何调用该函数?如果它返回一个字符串,我可以将该值存储在正常的NSString中吗?或者我应该为它声明一个c字符串?

提前致谢

1 个答案:

答案 0 :(得分:1)

您可以像往常一样使用C代码:

-(void)writeString:(NSString*)data toFile:(NSString*)filename {
    FILE* output = fopen([filename UTF8String], "w");
    fprintf(output, "%s", [data UTF8String]);
    fclose(output);
}

对于其他.c文件,只需#include相应的标题即可。然后,你可以调用它的函数。

例如,如果这是foo.h:

int add(int a, int b);

和foo.c:

#include "foo.h"

int add(int a, int b) {
    return a + b;
}

然后在你的Objective-C代码(Bar.m)中:

-(int)addA:(int)a andB:(int)b {
    return add(a, b);
}

那基本上就是一个包装器。但是,Objective-C中的C代码不需要包装器。甚至C ++函数也不需要包装器,因为.mm文件是Objective-C ++源代码。

编辑:

要使用参数调用C函数,只需使用参数调用它们。字面上任何有效的C程序也是一个有效的Objective-C程序。如果它可以编译为.c文件,它将编译为.m文件。

将C字符串(char*)转换为NSString:

const char* myString = "Hello!";
NSString* myNSString = [NSString stringWithUTF8String:myString];