Objective-C 调用C++,C
1. 建立一个C++类
2. 写一个Adaptor的Objective-C类
3. 在其他Objective-C的逻辑中调用Adaptor类。
1.C++类
// // CPlusPlusClass.h // OBJ_C++ // // Created by Txtw on 13-7-2. // Copyright (c) 2013年 Txtw. All rights reserved. // #ifndef __OBJ_C____CPlusPlusClass__ #define __OBJ_C____CPlusPlusClass__ #include <iostream> class CPlusPlusClass { public: CPlusPlusClass(); virtual ~CPlusPlusClass(); void func(); void setInt (int i) { m_i = i; } private: int m_i; }; #endif /* defined(__OBJ_C____CPlusPlusClass__) */
// // CPlusPlusClass.cpp // OBJ_C++ // // Created by Txtw on 13-7-2. // Copyright (c) 2013年 Txtw. All rights reserved. // #include "CPlusPlusClass.h" CPlusPlusClass::CPlusPlusClass() : m_i(0) { printf("CPlusPlusClass::CPlusPlusClass()\n"); func(); } CPlusPlusClass::~CPlusPlusClass() { printf("CPlusPlusClass::~CPlusPlusClass()\n"); } void CPlusPlusClass::func() { printf("CPlusPlusClass func print: %d\n", m_i); }
2. Adaptor类
// // ObjectiveCAdaptor.h // OBJ_C++ // // Created by Txtw on 13-7-2. // Copyright (c) 2013年 Txtw. All rights reserved. // #import <Foundation/Foundation.h> class CPlusPlusClass; //这个声明得小心,千万不要写成@class,兄弟我搞了半宿才找到这个错误。呵呵,见笑,见笑。 @interface ObjectiveCAdaptor : NSObject { @private CPlusPlusClass *testObj; } - (void) objectiveFunc; @end
在Build Settings中把编译器的Compile Sources As选项改为Objective C++。否则编译器找不到C++类。
// // ObjectiveCAdaptor.m // OBJ_C++ // // Created by Txtw on 13-7-2. // Copyright (c) 2013年 Txtw. All rights reserved. // #import "ObjectiveCAdaptor.h" #include "CPlusPlusClass.h" @implementation ObjectiveCAdaptor - (id) init { if (self = [super init]) { testObj = new CPlusPlusClass(); } return self; } - (void) dealloc { if (testObj != NULL) { delete testObj; testObj = NULL; } [super dealloc]; } - (void) objectiveFunc { testObj->setInt(5); testObj->func(); } @end
3.调用
//调用示例: - (void) callObjectiveCAdaptorMethod { ObjectiveCAdaptor *testObjectiveCObj = [[ObjectiveCAdaptor alloc] init]; [testObjectiveCObj objectiveFunc]; [testObjectiveCObj release]; }
from:http://www.cnblogs.com/biosli/archive/2011/04/30/Mixing_ObjectiveC_and_Cplusplus_in_iPhone_Development.html
参考:http://www.cocoachina.com/bbs/read.php?tid-9111-fpage-3.html
http://blog.csdn.net/horkychen/article/details/7935910
调用C
1.创建.h, .m文件
2.#import "testC.h" 直接调用方法
testC.h如下:
int hello(int i,int j);
testC.m如下:
int hello(int i,int j){ return i+j; }