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()
{
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的更多相关文章
- js与objective-c的交互-备
在写 JavaScript 的时候,可以使用一个叫做 window 的对象,像是我们想要从现在的网页跳到另外一个网页的时候,就会去修改 window.location.href 的位置:在我们的 Ob ...
- Object-C与Swift混合开发
Object-C作为Apple的iOS App开发语言服务了很多个年头,2014年Apple推出了新的编程语言Swift.更高效更安全的口号再次吸引了一大批非iOS开发程序猿进入,小编觉得Swift代 ...
- IOS开发之——objective-c与javascript交互
原文:http://blog.csdn.net/pjk1129/article/details/6936545 在写 JavaScript 的时候,可以使用一个叫做 window 的对象,像是我们想要 ...
- iOS js与objective-c的交互(转)
在写 JavaScript 的时候,可以使用一个叫做 window 的对象,像是我们想要从现在的网页跳到另外一个网页的时候,就会去修改 window.location.href 的位置:在我们的 Ob ...
- Optaplanner与Google OR-Tools的区别
在规划相关的项目工作中,近两年我们的项目主要使用的是Optaplanner作为规划引擎,其核心也是一个的规划求解器(Solver).但作为另一个著名开源求解器Google OR-Tools(下称OR- ...
- Automake
Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...
- 黑马毕向东Java基础知识总结
Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记 侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...
- 《果壳中的C# C# 5.0 权威指南》 - 学习笔记
<果壳中的C# C# 5.0 权威指南> ========== ========== ==========[作者] (美) Joseph Albahari (美) Ben Albahari ...
- [Objective C]super dealloc 调用时机
转自:http://dcm19872007.blog.163.com/blog/static/86519374201311953739818/ objective-c 语言中最头疼的事就是内存释放,申 ...
- Unity3D脚本调用Objective C代码实现游戏内购买
0.开篇吐槽: 一年之内从WP转到iOS,又从iOS转到U3D,真心伤不起. 1.Unity3D脚本调用OC代码的原理: 其实也没啥神秘的,因为OC是和C互通的 ,C#又可以通过DllImport的形 ...
随机推荐
- Java 关于中文乱码处理的经验总结【转载】
为什么说乱码是中国程序员无法避免的话题呢?这个首先要从编码机制上说起,大家都是中文和英文的编码格式不是一样,解码也是不一样的!如果中国的程序员不会遇到乱码,那么只有使用汉语编程.汉语编程是怎么回事我也 ...
- 登陆shell与交互式非登陆shell的区别
登录shell 所谓登录shell,指的是当用户登录系统时所取的那个shell,登录shell属于交互式shell. 登录shell将查找4个不同的启动文件来处理其中的命令. bash shell处理 ...
- 学习Java Web开发
学习DreamWaveMX中文版的网页设计技术 HTML网页设计,这是最基本的.学习XML的一些基本知识.初步掌握一些JSCRIPT的应用. 学习JAVA语言. 这应该分成2次来进行: 第1次找一本国 ...
- ExecutorService.execute(Runnable x) 判断是否完成,得到返回值
public class RunnableTestMain { public static void main(String[] args) { ExecutorService pool = Exec ...
- 职责链实现的apache.chain使用
其实职责链在老早就使用过了,以前在HW给Vodafone做金融项目的时候,使用职责链完成交易步骤,那时觉得这东西真好用,可以直接通过配置决定业务流程,现在终于有机会实践一下. 项目地址:h ...
- 百度地图API的调用
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...
- 数论/the second wave
扩展欧几里得算法. void exgcd(int a,int b,int&x,int&y){ if(!b) { x=1;y=0;return ; } exgcd(b,a%b,x,y); ...
- Java集合类:AbstractCollection源码解析
一.Collection接口 从<Java集合:整体结构>一文中我们知道所有的List和Set都继承自Collection接口,该接口类提供了集合最基本的方法,虽然List接口和Set等都 ...
- 【原】Redis-LRU缓存
Redis高级篇 Redis-LRU缓存 将Redis作为缓存使用时,有时添加新数据时,旧数据是很难被清空的. LRU(Least Recently Used) 近期最少使用算法是常用算法之一. 最大 ...
- Global.asax 文件是什么(转)
原文链接:http://www.cnblogs.com/I-am-Betty/archive/2010/09/06/1819558.html MSDN :https://msdn.microsoft. ...