zoukankan      html  css  js  c++  java
  • OC代码调用C++代码的回调函数步骤

    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
  • 相关阅读:
    名言
    八猫图
    springMVC 上传下载文件
    mongdb 模糊查询
    tomcat结合nginx使用小结
    orale存储过程
    java执行效率低,但效率就低吗?
    Spring aop 原始的工作原理的理解
    spring aop一些名词的理解
    Spring控制反转(IOC)和依赖注入(DI),再记不住就去出家!
  • 原文地址:https://www.cnblogs.com/willbin/p/2983878.html
Copyright © 2011-2022 走看看