回调函数

http://www.cnblogs.com/ioleon13/archive/2010/03/02/1676621.html

1 类A想告诉类B一件事情,通过回调函数来实现,而不在是通过

 

1)在B类模块定义了回调函数a()的原型

  typedef void (*SCT_XXX)(LPVOID lp, const CBParamStruct& cbNode); SCT_XXX是回调函数名称,lp是回调上下文,CBParamStruct是回调参数,一般由于要回调的参数不止一个,所以定义一个结构体比较方便。

2)注册回调函数

  为了让模块B知道自己将要使用的回调函数,必须有一个函数或语句来注册回调函数

  注册回调函数的定义遵循void RCF_XXX(SCT_XXX pfn, LPVOID lp); RCF_XXX是注册函数名,pfn是回调函数名称(是指针),lp是回调上下文。一般在A模块初始化完B模块后调用,将A模块中定义的回调函数地址赋值给pfn,lp赋值为this。 

3)

  首先将回调函数声明成静态的,static void  CF_XXX(LPVOID lp, const CBParamStruct& cbNode); 函数的参数必须与B模块中回调函数原型的参数保持一致。

  初始化B模块时,调用注册函数将模块A中声明的回调函数CF_XXX的地址传给pfn,即pfn=CF_XXX;(函数名称CF_XXX其实是个指针,指向回调函数的地址) 。

posted @ 2017-05-05 16:22  liuzhipenglove  阅读(196)  评论(0编辑  收藏  举报