在封装Socket时回调函数,static成员的冲突,望不吝赐教解决方案

在封装Socket时回调函数,static成员的冲突,望不吝赐教

刚从C++Builder转到VC,请多多指点!

★     在使用C++Builder时,往往感觉到其强大丰富的组件给开发
带来的便利:
        如在使用Socket组件时,你可以拖一个TServerSocket(假
设名为ServerSocketTest)组件到一个Form(假设名为TFormTest)
上,并定义选择的事件(假设为OnAccept事件)。这时在TFormTest
的.h文件和.cpp文件分别生成如下代码:
       
      .h
      class   TFormTest
      {
              ...
              TServerSocket*   ServerSocketTest;
              void   __fastcall   ServerSocketTestAccept(...);
              ...
      };

      .cpp
      ...
      void   __fastcall   TFormTest::ServerSocketTestAccept(...)
      {
      }
     
      对此我的理解(如果有错,万分感激给我指点)是:
TFormTest::ServerSocketTestAccept()是一个
回调函数,它的地址将被传给ServerSocketTest::OnAccept,然后
在适当的时候被应用程序或其他程序调用。

★     而在MFC(本人刚学)中,我只会继承CSocket进行网络编程,比如
对于一个继承自CSocket的类
        class   CServerSocket1   :   public   CSocket{};
如果我定义了它的OnReceive事件CServerSocket1::OnReceive(){},
那么对于用CServerSocket1声明的每一个对象
        如CServerSocket1   sk1,   sk2;
它们的OnReceive无疑问都千篇一律。若要各有不同的OnReceive,
我第一个想法就是再定义CServerSocket2   :   public   CSocket{};
然后定义CServerSocket2::OnReceive()事件,最后声明:
            CServerSocket1   sk1;   CServerSocket2   sk2;
于是sk1,sk2有不同的OnReceive。(^o^比BCB要麻烦)

★     深感不便和困惑,于是我用VC在CSocket的基础上封装了自己的
Socket:  
CLanSocketServer(对应BCB的TServerSocket),和
CLanSocketClient(对应BCB的TClientSocket)
封装后几乎实现了TServerSocket和TClientSocket一样的功能。


然而正高兴之余发现了问题:
我的Socket当然会用到回调,而如果回调函数又是一个类的
成员函数,如:

      class   CMyDlg   :   public   CDialog
      {
            ...
            CLanSocketServer   *m_pSocket;
            void   CALLBACK   m_pSocketOnAccept();//m_pSocket的OnAccept回调
            ...
      };  
因为回调函数是类成员
      于是只得修改如下:
      class   CMyDlg   :   public   CDialog
      {
            ...
            CLanSocketServer   *m_pSocket;
            static   void   CALLBACK   m_pSocketOnAccept();  
            ...
      };
回调函数注册及其它我都封装好了的,用户不用管,只管定义回调函
数(事件响应)就是
     
      但是,由于m_pSocketOnAccept()是static类型的,所以它不能访问
CMyDlg的非静态成员,   如
      class   CMyDlg   :   public   CDialog
      {
            public:
                  ...
                  CLanSocketServer   *m_pSocket;
                  static   void   CALLBACK   m_pSocketOnAccept();