我浏览了很多网站,但他们到处都给出了如何编写c ++库的包装器。
现在,我有一个.c文件,我希望将其集成到我的应用程序中。由于Objective c是c的面向对象的扩展,我实际上是否必须为它编写包装器?如果有,该怎么办?如果我没有,那么如何在我的项目中使用c代码?
编辑:确定..我要做的是将文件添加到我的项目中并使用这些功能?究竟怎么做?就像普通的C电话一样?如果我必须传递参数怎么办?
假设我有一个返回字符串的函数,首先我该如何调用该函数?如果它返回一个字符串,我可以将该值存储在正常的NSString中吗?或者我应该为它声明一个c字符串?
提前致谢
答案 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];