oc与c语言的相互调用
一: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语言的相互调用的更多相关文章
- iOS JS 和 OC交互 / JS 和 native 相互调用
现在app 上越来越多需求是通过UIWebView 来展示html 或者 html5的内容, js 和 native OC代码交互 就非常常见了. js 调用 native OC代码 第一种机制 ( ...
- C&C++——C函数与C++函数相互调用问题
C C++相互调用 在项目中融合C和C++有时是不可避免的,在调用对方的功能函数的时候,或许会出现这样那样的问题,但只要我的C代码和我的C++代码分别都能成功编译,那其他就不是问题.近来在主程序是C语 ...
- Lua 与 OC 相互调用
本文主要讲如何完成lua和object-c的相互调用. lua是一种脚本语言,可以方便的移植到各种宿主语言中,并且可以支持热更新,在游戏开发中也能当做主要的语言来编写游戏的逻辑,但是要接入 ...
- JS代码和OC代码的相互调用
JS调用OC 很多应用里面或多或少的调用了网页,来达到绚丽的效果,所谓的JS调用OC.....举个例子吧,网页上有个按钮 点击按钮跳转界面,跳转的动作由OC的代码实现. OC调用JS 还是举个例子,我 ...
- lua语言自学知识点----Lua与.Net相互调用
知识点: LuaInterface作用是用来完成Lua与C#的相互调用. LuaInterface核心库:1.luainterface.dll 用于C#读取lua(放在bin目录同级) 2.luane ...
- C语言与汇编语言相互调用原理以及实例
C语言与汇编语言相互调用原理以及实例 1.原理 其实不管是C语言还是汇编语言想要执行都是最终编译链接成为二进制文件. 这里一定要明确编译和链接是两个步骤,生成的文件格式也是不一样的. 编译生成的文件是 ...
- JS与原生OC/Swift相互调用总结
代码地址如下:http://www.demodashi.com/demo/12754.html JS-OC-Swift JS和OC/Swift相互调用,主要总结了JS和OC交互的三种方式 1.使用UI ...
- 转载 OS js oc相互调用(JavaScriptCore) ---js调用iOS ---js里面直接调用方法
OS js oc相互调用(JavaScriptCore) 接着上节我们讲到的iOS调用js 下来我们使用js调用iOS js调用iOS分两种情况 一,js里面直接调用方法 二,js里面通过对象调用 ...
- 转载 iOS js oc相互调用(JavaScriptCore) --iOS调用js
iOS js oc相互调用(JavaScriptCore) 从iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了. 下面我们就简单了解一下这 ...
随机推荐
- DIV浮动层被OCX控件遮蔽解决方案
在开发中需要在网页中嵌入OCX控件,但是控件嵌入后,总是会出现在网页最顶层,页面中的浮动DIV总是不能正常显示,会被遮蔽掉,那么这里就需要特殊处理一下: OBJECT会遮蔽掉页面内容,但是IFRAME ...
- AWT 新建窗口
新建一个窗口 包 import java.awt.*; 定义 Frame frm_Draw = new Frame("Text"); 初始化代码 public void Frame ...
- ES6 的 一些语法
1,let 声明变量 let 声明的变量只能在let 的块级作用域中生效,也是为了弥补var声明变量的全局污染问题. var 声明变量有变量提升的作用,也就是在声明变量之前可以使用变量 console ...
- radio日志sim卡信号状态分析
logcat -b radio日志 // 接着将slot 0主卡置为false,将slot 1设置为true 08-09 11:24:40.335 2565 3243 D RILJ : [4820]& ...
- 设计模式八: 委派(Delegate)
简介 委派模式不属于GOF23种设计模式, 主要角色有三种: 抽象任务角色, 委派者角色, 具体任务角色. 实现层面上, 定义一个抽象接口, 它有若干实现类, 他们真正执行业务方法, 这些子类是具体任 ...
- Beta 冲刺(1/7)
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(1/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 团队完成测试答辩 整理博客 复习接口 接下来的 ...
- selenium——鼠标事件
右键操作: 双击:
- PHP实用工具类
2018年10月25日 20:21:09 组装SQL语句 适用MySQL, 链式调用, 组装后可传参选择是否查询数据库 项目地址: 码云 生成数据字典 适用MySQL, 链式调用, 可生成word, ...
- HiveQl 基本查询
1 基本的Select 操作 SELECT [ALL | DISTINCT] select_expr, select_expr, ...FROM table_reference[WHERE where ...
- 【python】多进程共享变量Manager
Manager的复杂结构赋值问题 Manager的字典类型: 如果value是简单类型,比如int,可以直接赋值给共享变量,并可以后续直接修改 如果value是复杂类型 ,比如list,dict,则必 ...