从您的objective-c代码调用C ++方法

时间:2011-04-12 21:34:21

标签: iphone objective-c

我将一些C类导入到我的应用中。因此,除了我的.h和.m objective-c类,我还有一些.h和.c C ++类。这样做可以吗?或者我需要将它们编译成.a以便可以使用它们吗?

假设我已经完成了我所做的一切,我想称之为C ++方法

mms_t *mms_connect (mms_io_t *io, void *data, const char *url, const char *host, const char *uri,const  char *query,int pport, int bandwidth) 

所以这个方法返回一个名为mms_t?

的结构

它要求我传入一些char *。 在Objective-C中,我可以在这里传递什么?这种语言有char *吗?我猜我不能在它的位置传递一个NSString?

我从一小段C代码中看到了

    strTemp = @"mms://123.30.49.85/htv2";

char *g_tcUrl = new char[[strTemp length] + 1];

使用'new'?

目标c与上述代码相当吗?

非常感谢, -Code

2 个答案:

答案 0 :(得分:2)

首先,您必须将Objective-C文件的类型更改为Objective-C ++。您可以通过将文件扩展名更改为.mm或使用文件信息面板(按住Ctrl键单击,获取信息)来执行此操作。

对于char*,您可以使用UTF8StringcStringUsingEncoding:将NSString转换为C字符串,如下所示:

NSString *foo = @"Foo";
char *fooascii = [foo cStringUsingEncoding:NSASCIIStringEncoding];
char *fooutf8 = [foo UTF8String];

答案 1 :(得分:0)

您可以在Objective C和C ++中自由调用,实际上可以将它们混合在一起。您需要做的就是在适当的时候转换类型。您需要将您的代码文件命名为.mm(技术上为Objective C ++文件),而不是.m文件,以包含C ++头文件。

要将Objective C字符串转换为C样式字符串,请执行以下操作:

const char *cString = [strTemp cStringUsingEncoding:NSUTF8StringEncoding];