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

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值