1. Object-C Call C++
1.1. 建立一个C++类
1.2. 写一个Adaptor的Objective-C类
1.3. 在其他Objective-C的逻辑中调用Adaptor类。
1.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); }
1.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
1.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
2. Object-C Call C
2.1.创建.h, .m文件
2.2 #import "testC.h" 直接调用方法
testC.h如下:
int
hello(
int
i,
int
j);
|
testC.m如下:
int
hello(
int
i,
int
j){
return
i+j;
}
|