http://hi.baidu.com/52study/item/82ed1838b96725b7b80c033f?connect=qzone

1、C++代码中的回调函数

在C++的头文件中声明回调函数,如typedef void (*OnCompleteCallback)(const char *code, bool flag);

2、C++代码中的结构体

在C++的头文件中声明一个结构体,该结构体中包含回调函数的一个函数声明变量属性。如:

1
2
3
4
5
6
typedef struct tagStreamInfo {     
  CFDictionaryRef   proxy;        // 可以使用Objective-C的数据类型    
  SInt64  fileSize;     
                
  OnCompleteCallback  Complete;   // 回调函数声明    
} StreamInfo;

3、C++代码中声明静态函数

可以使用C++代码中的静态函数来调用回调函数,先声明一个结构体参数或指针类型参数的函数。如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// util.h文件中声明     
class CUtil    
{    
public:    
    CUtil();    
    virtual ~CUtil();    
public:  
   Boolean Upload(OnCompleteCallback callback);  
public:   // 注意必须声明为public    
   static void UploadCallBack(void *clientCallbackInfo);     
};    
// util.cpp文件中实现     
void CUtil::UploadCallBack(void *clientCallbackInfo)    
{    
    StreamInfo *info = (StreamInfo *)clientCallbackInfo;    
     // 其他代码    
   ......    
    // 回调    
   if (info->CompleteUpload != NULL) {    
        (*info->CompleteUpload)("to complete uploading"true);    
    }        
   
Boolean CUtil::Upload(OnCompleteCallback callback) 
    StreamInfo *info = new StreamInfo(); 
    info->CompleteUpload = callback; 
}

4、Objective-C代码中实现C++代码中的回调函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// manager.h文件    
void OnCompleteUpload(const char *code, bool flag);    
@interface manager : NSObject     
+(manager *)sharedInstance;    
-(void)upload;  
-(void)completeUpload:(NSString *)code success:(BOOL)flag;    
@end    
         
// manager.mm文件    
         
// 实现回调函数    
void OnCompleteUpload(const char *code, bool flag)    
{    
    NSString *str = [NSString alloc] initWithUTF8String:code] autorelease];    
    [manager sharedInstance] completeUpload:str success:flag];    
}    
         
@implementation manager    
         
+(manager *)sharedInstance {    
    static dispatch_once_t onceToken;    
    static *manager instance;    
    dispatch_once(&onceToken,^{ instance=[[manager alloc] init];        
    return instance;    
}    
         
-(void)completeUpload:(NSString *)code success:(BOOL)flag {    
    NSLog(@"%@", code);    
}    
   
-(void)upload { 
    CUtil *utl = new CUtil(); 
    utl->Upload(OnCompleteUpload);  // 此处调用回调函数
@end

转载于:https://www.cnblogs.com/willbin/archive/2013/03/27/2983878.html

OC代码调用C++代码的回调函数步骤相关推荐

  1. 在C代码调用C++代码

    由于历史原因,以及不同开发人员的技术偏好,C语言和C++语言都有一些独有的非常有价值的项目,因而两种语言的互操作,充分利用前人造的轮子是一件非常有价值的事情. C++代码调用C代码很简单,只要分别在包 ...

  2. VUE 学习代码 监视和 模板语法回调函数

    文章目录 HelloWorld 模板语法 03_计算属性和监视 HelloWorld <!DOCTYPE html> <html lang="en"> &l ...

  3. Simulink-模块Moudle调用回调函数步骤

    一.模块Moudle调用回调函数位置 软件版本:R2021a 在simulink创建module后,单击右键,选择下图中的"Module Properties".  选择弹出界面的 ...

  4. java如何调用网页_如何使用网页开发自己的app,在网页中的按钮与自己的java代码绑定来实现打电话即javascript代码调用java代码,和java代码来调用javascript代码...

    1首先是如何在自己的app里用网页显示,这样可以较快的更新界面而不需要让客户端升级,方法如下: xml文件: android:layout_width="fill_parent" ...

  5. c语言调用go函数,C中调用go中的回调函数

    在用go包装某些c库时(如glut),需要将go函数当作回调函数传递给c库(如glutDisplayFunc(&draw)中的draw函数,我想将go写的函数传过去),应该怎么做?我写了一个示 ...

  6. Java代码调用PHP代码

    JAVA代码调用PHP程序 import java.io.IOException; import java.io.InputStream; import java.io.InputStreamRead ...

  7. swift项目调用OC代码,OC项目调用swift代码

    swift调用oc 在一个 Swift 开发的工程中可以通过两种方法来生成桥接文件. 第一种是,直接拖拽 OC 文件到工程中,此时系统会询问是否生成桥接文件,如图: 选择 "Create B ...

  8. OC中调用Swift代码方法

    最近在项目中使用到了Swift语言写的第三方的框架,所以在这里将OC中使用Swift的方法说明一下. 1.首先要在Build Setting中进行相关配置 2.在Podfile文件中要加上use_fr ...

  9. 02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译

     1  编写以下案例(下面的三个按钮都调用了底层的C语言): 项目案例的代码结构如下: 2 编写DataProvider的代码: package com.example.ndkpassdata; ...

最新文章

  1. 全浏览器兼容的DIV拖动效果
  2. Eclipse 中maven插件坏死解决办法
  3. java.util.Properties类,保存时保留注释及格式不变
  4. Scatec Solar拟在乌克兰建设60MW光伏电站
  5. Web前端3.0时代,“程序猿”如何“渡劫升仙”
  6. KNN(二)--近似最近邻算法ANN
  7. Visual Studio 2019 Community 离线注册教程
  8. 如何做客户分析?客户分析的内容有哪些?
  9. P5713 【深基3.例5】洛谷团队系统(C语言)
  10. xp系统计算机怎么连接到网络打印机,老司机教你win7如何连接共享xp打印机
  11. 模态框获取页面请求数据
  12. python numpy 求top-k accuracy指标
  13. BI神器Power Query(2)-- PQ数据源
  14. C++实现RS485通信
  15. 路由器和交换机的工作原理---笔面试
  16. GIT(分布式版本控制系统)入门
  17. XAMPP创建数据库
  18. python中的pandas库
  19. 甲骨文的云计算转型成功 市值首超2000亿美元
  20. 【Numpy学习笔记1】numpy安装、维度、基本运算、改变数据形态

热门文章

  1. xtrabackup 升级 mysql_使用percona-xtrabackup-2.0.8将MySQL从5.1.73升级到5.6.36
  2. python中的def函数括号里的默认值_Python中的默认参数值
  3. 用VBA编程时,如何对当前的工作表进行选定[收集]
  4. Linux 常用C函数说明-文件权限控制篇
  5. IEEE旗下AI顶会CVPR力挺华为:多位主席联名,支持自由审稿参会
  6. AI空谈情怀,也是要输的 | 人机辩论大战
  7. 小米牵手宜家,成立亿元开发者基金,雷军不仅要当AIoT开拓者,还要当扛把子...
  8. 机器人汉堡店即将开业,做一个汉堡需要5分钟
  9. 癌细胞检测,只要0.0758秒 | 谷歌AR+AI显微镜问世
  10. 李彦宏:属于百度的日子终于来了,曾与Facebook谈建合资公司