一:OC调用C语言

C语言的.h文件

    //
// TestPrint.h
// TestDemo
//
// Created by Techsun on 14-8-12.
// Copyright (c) 2014年 techsun. All rights reserved.
// #ifndef TestDemo_TestPrint_h
#define TestDemo_TestPrint_h void printlog(); #endif

C语言中.c文件

    //
// TestPrint.c
// TestDemo
//
// Created by Techsun on 14-8-12.
// Copyright (c) 2014年 techsun. All rights reserved.
// #include <stdio.h>
#include "TestPrint.h" void printlog(){
printf("hello world !!!");
}

OC的.m文件

//
// AClass.m
// TestDemo
//
// Created by Techsun on 14-8-12.
// Copyright (c) 2014年 techsun. All rights reserved.
// #import "AClass.h"
#import "TestPrint.h" @implementation AClass
- (void)printfhello{
printlog();
}
@end

二:C语言调用OC

1)方式1:c++直接包含oc头文件,编译时加入连接选项

  main.cpp

#include "CppFile.h"
#include <memory> int main(int argc, char** argv)
{
std::shared_ptr<CppFile> cppfile(new CppFile());
cppfile->print_cpp_Msg();
cppfile->print_oc_Msg(); return 0;
}

CppFile.h

#ifndef __CPP_FILE__
#define __CPP_FILE__ class CppFile
{
public:
void print_cpp_Msg();
void print_oc_Msg();
};
#endif

CppFile.mm 因为CppFile中使用OC相关的函数,所以我们需要import

#include <iostream>
#import <Foundation/Foundation.h> #include "CppFile.h" void CppFile::print_cpp_Msg()
{
std::cout << "This is cpp file msg" << std::endl;
} void CppFile::print_oc_Msg()
{
NSLog(@"This is object-c msg");
}

编译及运行

在编译的时候需要加上-framework Foundation的参数,否则会提示找不到”_NSLog”定义。

Compile:

#compile cpp file
clang++ -g -O2 -Wall -std=c++11 -c main.cpp
#compile oc file
clang++ -g -O2 -Wall -std=c++11 -c CppFile.mm -framework Foundation
#link object
clang++ -o test main.o CppFile.o -framework Foundation 2)OC实现回调函数,并传递给C

1、参数传递

1.1 全局:自定义一种CallBackFunc类型的函数指针   
typedef void (*CallBackFunc)(param);

1.2 在类 A(OC)中

定义回调函数的实现:

void playCallback(param)
{
    //NSLog(@"loginCallback");
}

同时,调用类B的函数,同时把playCallback作为参数传递过去

void B::setCallBack(playCallback);

1.3 在类B(C++)中定义类型为CallBackFunc的函数指针:
CallBackFunc pCallBackFunc;

void B::setCallBack(CallBackFunc pcallbackFunc)

{

this->pCallBackFunc = pcallbackFunc;

}

 

oc与c语言的相互调用的更多相关文章

  1. iOS JS 和 OC交互 / JS 和 native 相互调用

    现在app 上越来越多需求是通过UIWebView 来展示html 或者 html5的内容, js 和 native OC代码交互 就非常常见了. js 调用 native  OC代码 第一种机制 ( ...

  2. C&C++——C函数与C++函数相互调用问题

    C C++相互调用 在项目中融合C和C++有时是不可避免的,在调用对方的功能函数的时候,或许会出现这样那样的问题,但只要我的C代码和我的C++代码分别都能成功编译,那其他就不是问题.近来在主程序是C语 ...

  3. Lua 与 OC 相互调用

    本文主要讲如何完成lua和object-c的相互调用.       lua是一种脚本语言,可以方便的移植到各种宿主语言中,并且可以支持热更新,在游戏开发中也能当做主要的语言来编写游戏的逻辑,但是要接入 ...

  4. JS代码和OC代码的相互调用

    JS调用OC 很多应用里面或多或少的调用了网页,来达到绚丽的效果,所谓的JS调用OC.....举个例子吧,网页上有个按钮 点击按钮跳转界面,跳转的动作由OC的代码实现. OC调用JS 还是举个例子,我 ...

  5. lua语言自学知识点----Lua与.Net相互调用

    知识点: LuaInterface作用是用来完成Lua与C#的相互调用. LuaInterface核心库:1.luainterface.dll 用于C#读取lua(放在bin目录同级) 2.luane ...

  6. C语言与汇编语言相互调用原理以及实例

    C语言与汇编语言相互调用原理以及实例 1.原理 其实不管是C语言还是汇编语言想要执行都是最终编译链接成为二进制文件. 这里一定要明确编译和链接是两个步骤,生成的文件格式也是不一样的. 编译生成的文件是 ...

  7. JS与原生OC/Swift相互调用总结

    代码地址如下:http://www.demodashi.com/demo/12754.html JS-OC-Swift JS和OC/Swift相互调用,主要总结了JS和OC交互的三种方式 1.使用UI ...

  8. 转载 OS js oc相互调用(JavaScriptCore) ---js调用iOS ---js里面直接调用方法

    OS js oc相互调用(JavaScriptCore)   接着上节我们讲到的iOS调用js 下来我们使用js调用iOS js调用iOS分两种情况 一,js里面直接调用方法 二,js里面通过对象调用 ...

  9. 转载 iOS js oc相互调用(JavaScriptCore) --iOS调用js

    iOS js oc相互调用(JavaScriptCore)   从iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了. 下面我们就简单了解一下这 ...

随机推荐

  1. DIV浮动层被OCX控件遮蔽解决方案

    在开发中需要在网页中嵌入OCX控件,但是控件嵌入后,总是会出现在网页最顶层,页面中的浮动DIV总是不能正常显示,会被遮蔽掉,那么这里就需要特殊处理一下: OBJECT会遮蔽掉页面内容,但是IFRAME ...

  2. AWT 新建窗口

    新建一个窗口 包 import java.awt.*; 定义 Frame frm_Draw = new Frame("Text"); 初始化代码 public void Frame ...

  3. ES6 的 一些语法

    1,let 声明变量 let 声明的变量只能在let 的块级作用域中生效,也是为了弥补var声明变量的全局污染问题. var 声明变量有变量提升的作用,也就是在声明变量之前可以使用变量 console ...

  4. radio日志sim卡信号状态分析

    logcat -b radio日志 // 接着将slot 0主卡置为false,将slot 1设置为true 08-09 11:24:40.335 2565 3243 D RILJ : [4820]& ...

  5. 设计模式八: 委派(Delegate)

    简介 委派模式不属于GOF23种设计模式, 主要角色有三种: 抽象任务角色, 委派者角色, 具体任务角色. 实现层面上, 定义一个抽象接口, 它有若干实现类, 他们真正执行业务方法, 这些子类是具体任 ...

  6. Beta 冲刺(1/7)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(1/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 团队完成测试答辩 整理博客 复习接口 接下来的 ...

  7. selenium——鼠标事件

    右键操作: 双击:

  8. PHP实用工具类

    2018年10月25日 20:21:09 组装SQL语句 适用MySQL, 链式调用, 组装后可传参选择是否查询数据库 项目地址: 码云 生成数据字典 适用MySQL, 链式调用, 可生成word, ...

  9. HiveQl 基本查询

    1 基本的Select 操作 SELECT [ALL | DISTINCT] select_expr, select_expr, ...FROM table_reference[WHERE where ...

  10. 【python】多进程共享变量Manager

    Manager的复杂结构赋值问题 Manager的字典类型: 如果value是简单类型,比如int,可以直接赋值给共享变量,并可以后续直接修改 如果value是复杂类型 ,比如list,dict,则必 ...