1

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

现在,我有一个 .c 文件,我想将它集成到我的应用程序中。由于Objective c是c的面向对象的扩展,我真的需要为它编写包装器吗?如果是,该怎么做?如果我不需要,那么如何在我的项目中使用 c 代码?

编辑:好的..我要做的就是将文件添加到我的项目中并使用这些功能?具体怎么做??就像正常的c调用一样?如果我必须传递参数怎么办?

假设我有一个返回字符串的函数,首先我如何调用该函数?如果它返回一个字符串,我可以将该值存储在普通的 NSString 中吗?还是我应该为它声明 ac 字符串?

提前致谢

4

1 回答 1

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];
于 2012-11-28T05:48:14.153 回答