• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Objective-C调用C++,C

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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;
}

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap