关于回调函数中参数传递的有关问题,多个同时执行的相同回调函数如何传递不同的参数内容

关于回调函数中参数传递的问题,多个同时执行的相同回调函数怎么传递不同的参数内容?
如这样的情况:
class   CA
{
        static   char   *buf;
        //设备驱动回调函数,允许多个设备同时使用
        static   DWORD   funcallback(...);
};

char   CA::buf   =   NULL;
CA::CA()
{
      buf   =   new   char[max_buf];
}

DWORD   CA::funcallback(...)
{
        memcpy(   buf,   x,   size   );
        .....
}

如果我是这么做的话就有麻烦了:
class   CMainDlg   :   public   CDialog
{
public:
        CA     a[5];//同时声明5个表示有5个设备同时启动
        BOOL   init();
}

BOOL   CMainDlg::init()
{
        for(   int   i   =   0;   i   <   5;   i++   )
                a[i].start();
}
由于在上面的代码中CA的成员buf是全局的,那么在构造中分配的内存实际只保留了最后一次分配的,也就是这5个回调共享了一个缓冲,这肯定是错误的,而且会有内存泄漏,请问象这样的情况如何解决?

------解决方案--------------------
可以考虑下多线程,这样实现还是比较方便的 。
------解决方案--------------------
在 funcallback 函数里面分配内存就没这个问题了
------解决方案--------------------
既然每个设备独立同时工作,就不应该把buf定为static类型,每个实例自己分配内存
------解决方案--------------------
对,不应该声明参数为static全局变量。
应该
static DWORD funcallback( char *pParam1,char *pParam2,..........);

回 "在回调和程序中都直接使用 "
可以通过参数返回值嘛。
------解决方案--------------------
把要共享的信息都放在一起,比如一个结构,或者一个类。比如一个buf,一个hdr。

typedef struct _tag_share_info
{
_tag_share_info()
{
//init
}

char buf[max_buf];
HDRVR hdr;
}SHARE_INFO_T;

class CA
{
SHARE_INFO_T share_info;
//设备驱动回调函数,允许多个设备同时使用
static DWORD funcallback((void*)&share_info, ..);
};