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()
{
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();
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;
}

Objective-C 调用C++,C的更多相关文章

  1. js与objective-c的交互-备

    在写 JavaScript 的时候,可以使用一个叫做 window 的对象,像是我们想要从现在的网页跳到另外一个网页的时候,就会去修改 window.location.href 的位置:在我们的 Ob ...

  2. Object-C与Swift混合开发

    Object-C作为Apple的iOS App开发语言服务了很多个年头,2014年Apple推出了新的编程语言Swift.更高效更安全的口号再次吸引了一大批非iOS开发程序猿进入,小编觉得Swift代 ...

  3. IOS开发之——objective-c与javascript交互

    原文:http://blog.csdn.net/pjk1129/article/details/6936545 在写 JavaScript 的时候,可以使用一个叫做 window 的对象,像是我们想要 ...

  4. iOS js与objective-c的交互(转)

    在写 JavaScript 的时候,可以使用一个叫做 window 的对象,像是我们想要从现在的网页跳到另外一个网页的时候,就会去修改 window.location.href 的位置:在我们的 Ob ...

  5. Optaplanner与Google OR-Tools的区别

    在规划相关的项目工作中,近两年我们的项目主要使用的是Optaplanner作为规划引擎,其核心也是一个的规划求解器(Solver).但作为另一个著名开源求解器Google OR-Tools(下称OR- ...

  6. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  7. 黑马毕向东Java基础知识总结

    Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记    侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...

  8. 《果壳中的C# C# 5.0 权威指南》 - 学习笔记

    <果壳中的C# C# 5.0 权威指南> ========== ========== ==========[作者] (美) Joseph Albahari (美) Ben Albahari ...

  9. [Objective C]super dealloc 调用时机

    转自:http://dcm19872007.blog.163.com/blog/static/86519374201311953739818/ objective-c 语言中最头疼的事就是内存释放,申 ...

  10. Unity3D脚本调用Objective C代码实现游戏内购买

    0.开篇吐槽: 一年之内从WP转到iOS,又从iOS转到U3D,真心伤不起. 1.Unity3D脚本调用OC代码的原理: 其实也没啥神秘的,因为OC是和C互通的 ,C#又可以通过DllImport的形 ...

随机推荐

  1. WINCE6.0 error C2220: warning treated as error问题解决

    今天在编译IMX515的BSP的时候,发现下面的编译错误问题: BUILD: [00:0000002476:PROGC ] BuildingCOMPILE Pass in F:\WINCE600\PL ...

  2. C#中的多文档的使用

    1.首先,新建一个窗体,设置窗体的IsMdiContainer = true; 窗体的大小为700*600  长700  高600 2.在窗体的Load事件中添加如下代码 private void F ...

  3. 宏HASH_DELETE

    HASH_DELETE(buf_page_t, hash, buf_pool->page_hash, fold, bpage); NAME 可理解为 void* next /********** ...

  4. Terrocotta - 基于JVM的Java应用集群解决方案

    前言 越来越多的企业关键应用都必须采用集群技术,实现负载均衡(Load Balancing).容错(Fault Tolerance)和灾难恢复(Failover).以达到系统可用性(High Avai ...

  5. HTTP编程(六)

    此为网络编程的一个系列,后续会把内容补上.....

  6. OK335xS can't reset with reboot

    /*********************************************************************** * OK335xS can't reset * 说明: ...

  7. [html5] (Notification) 桌面通知

    前几天要做一个桌面通知的功能,翻查以前做的笔记,发现webkitNotifications这个已经不能用了,baidu了下,基本都是介绍webkitNotifications的,后来在SOF上找到答案 ...

  8. ubuntu设置ip和dns

      装完ubuntu 第一件事情就是连上网,换个源,进行更新操作,但前提条件是要配好ip和dns.   下面把自己配置的过程记录下来,权且当作一份备份,以便不时之需.   一.配置ip      ub ...

  9. Innodb buffer pool/redo log_buffer 相关

    InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理.在数据库系统中,由于CPU速度和磁盘速度之前的鸿沟,通常使用缓冲池技术来提高数据库的整体性能. 1. Innodb_buffe ...

  10. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]PrI.6.1

    Given a basis $U=(u_1,\cdots,u_n)$ not necessarily orthonormal, in $\scrH$, how would you compute th ...