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的交互更加方便了. 下面我们就简单了解一下这 ...
随机推荐
- [物理学与PDEs]第2章第2节 粘性流体力学方程组 2.2 应力张量
1. 在有粘性的情形, 外界流体对 $\Omega$ 的作用力, 不仅有表面上的压力 (正压力), 也有表面上的内摩擦力 (切应力). 2. 于 $M$ 处以 ${\bf n}$ 为法向的单位面积 ...
- SpringBoot中Application开启与关闭
0.声明 缘由:没有学过或者没有经历SpringBoot的Application运行机制的话,一定会好奇,博主为啥会写一篇关闭开启的博文,是不是好幼稚?(/o(╥﹏╥)o),待我娓娓道来......为 ...
- Codeforces 1060E(dfs计数)
题目链接 题意 给一棵树,对于一个节点,与它相邻的结点可以连一条边,求所有点对间距离之和 思路 任意两点间的距离被优化为$\left \lceil \frac{s}{2} \right \rceil$ ...
- pip 安装问题
同时安装了Python2 和Python3的情况下,由于我的电脑默认的是使用Python3,pip的时候直接就安装在3上了,为了让2也安装,办法之一就是在安装python2的路径下比如,D:\Anac ...
- 获取多<a/>标签id值的点击事件
<li> <div class="pic"> <c:if test="${userId != null }"> <a ...
- 微信app支付的坑
app支付商户申请,需注册并认证开放平台账号后电脑端登录开放平台官网:open.weixin.qq.com,[管理中心]->[移动应用],选择需要申请支付的应用,点击[查看]->[微信支付 ...
- Ubuntu查看端口占用情况
netstat -apn 其中最后一列是PID,可以通过kill Pid进行结束进程. 更精确的查找: netstat -apn | grep 8080 查询8080端口的进程 如果要查询这个进程的详 ...
- Alpha 事后诸葛亮(团队)
前言 事后诸葛亮?作业名真的不好听,下一届还要沿用吗? 队名:小白吃 通向hjj博客的任意门 思考总结 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? ...
- Nginx配置https证书
目前的大趋势是升级HTTP为HTTPS 本章介绍怎样实装HTTPS证书 # 如果报 ssl 错误是Nginx安装时未安装ssl 请重新编译nginx 可以参考我之前的博客 申请/获取https 这里就 ...
- Flask开发微电影网站(九)
1.后台管理之电影管理 1.1 电影管理之所有电影收藏列表 1.1.1 电影管理之电影收藏列表视图函数 在admin目录下的views.py文件中定义电影收藏列表视图函数 电影收藏列表视图函数需要被登 ...