用全局变量可以满足要求,除此之外呢?
我试着声明为类的成员变量,根本不行,由于采用的是多继承。
不知道大家有什么别的办法?

解决方案 »

  1.   

    类的成员在哪里声明就在哪里声明
    ATL中,还不是类吗
      

  2.   

    哈哈,我就是声明为接口实现类的成员变量呀,SOCKET conSock;
    接口实现了三个方法:ConnectServer、SendMsg、DisConnect分别是连接,发送,断开。
    调试发现:创建conSock时值为680,在SendMsg中使用时变为3452816845,在DisConnect中也是3452816845,在服务程序端能感知客户的连接和断开,就是无法接到数据,如果用全局变量代替成员变量就一切正常,不知道为什么?
      

  3.   

    soory zxfvc (七品VC)帐号没分了,解决的话用这个新帐号另外加分,谢谢!
      

  4.   

    用成员变量肯定没问题,像这样都没有问题:template< class _T >
    struct ATL_NO_VTABLE IMyTestImpl : public IMyTest
    {
    STDMETHOD(SetVal)(long lVal)
    {
    _T * pThis = static_cast<_T*>(this);
    pThis->m_lVal = lVal;
    return S_OK;
    }
    STDMETHOD(GetVal)(long* lval)
    {
    if( !lval ) return E_POINTER;
    _T * pThis = static_cast<_T*>(this);
    *lval = pThis-> m_lVal;
    return S_OK;
    }
    };class ATL_NO_VTABLE CXXXXOBJ : 
    public CComObjectRootEx<XXXXXX>,
    public CComCoClass<CXXXXX, &CLSID_XXXXXX>,
    public ......,
    public IMyTestImpl<CXXXXXOBJ>
    {
    public:
         long m_lVal;
    public:
     .........
    }
      

  5.   

    STDMETHODIMP CFirst_ATL::ConSer(BSTR str, short port)
    {
    // TODO: Add your implementation code here
    WSADATA ws;

    ::WSAStartup(MAKEWORD(2,0),&ws);
    conSock = socket(AF_INET,SOCK_STREAM,0);
    sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(port);
    USES_CONVERSION;
    addr.sin_addr.s_addr = inet_addr(OLE2A(str));
    int ref = connect(conSock,(sockaddr*)&addr,sizeof(addr));
    if(ref == 0)
    MessageBox(NULL,"连接成功","提示",MB_OK);
    m_a = 88;
    return S_OK;
    }STDMETHODIMP CFirst_ATL::SendMsg(BSTR msg)
    {
    char* sz = _com_util::ConvertBSTRToString(msg);
    int a=strlen(sz);
    int ref = send(conSock,sz,strlen(sz),0);
    itoa(m_a,sz,10);
    MessageBox(NULL,sz,"成员变量的值",MB_OK);
    return S_OK;
    }
    只要一执行后一个函数,m_a就突然变为-865625864。
    不知道为什么?