zoukankan      html  css  js  c++  java
  • 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()
    ");
        func();
    }
    
    CPlusPlusClass::~CPlusPlusClass()
    {
        printf("CPlusPlusClass::~CPlusPlusClass()
    ");
    }
    
    void CPlusPlusClass::func() {
        printf("CPlusPlusClass func print: %d
    ", 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;
    }
    
  • 相关阅读:
    android闹钟小案例之知识点总结
    转载---程序员发展之路
    android闹钟小案例之功能阐述
    基础篇:2.熟练掌握相关监听器的注册和使用
    基础篇:1.掌握基本组件和容器组件的使用
    微博分享、注销功能的实现
    新浪微博授权认证的实现
    新浪微博分享功能的简单实现
    读《编程高手箴言》笔记一
    Spark内核架构核心组件.txt
  • 原文地址:https://www.cnblogs.com/superchao8/p/3166642.html
Copyright © 2011-2022 走看看