在用CSerialPort类进行串口通信时候。在Dlg中定义了CSerialPort的类对象 m_SerialPort,同时在Dlg类中 新建一条线程SendDateThread()用于数据的发送。   请问为什么m_SerialPort.WriteToPort 为什么会提示error C2228: left of '.WriteToPort' must have class/struct/union type我明明已经定义过CSerialPort的类对象了。还有个问题,请问如何在线程中调用非静态的成员变量和函数。

解决方案 »

  1.   

    线程函数是全局或静态的,没有类的this指针
    在参数里,传类的指针
      

  2.   


    请问如何传递this指针呢?m_pThread= AfxBeginThread(SendDateThread(),this);//是这里的this吗?是的话在线程函数中怎么调用。
      

  3.   

    AfxBeginThread(SendDateThread,this);//
    线程函数中;
    UINT SendDateThread(LPVOID p)
    {
     C***Dlg* p1 = (C***Dlg*)p;
    }
      

  4.   


    谢谢回答,这样的话是将类的THIS指针传给p1了吗
      

  5.   

    最后一个问题,我现在想将一个8位的字符串通过串口发送出去,代码如下CCj_TarckDlg *m_pCj_Tarck=(CCj_TarckDlg *)lpParam;  BYTE   byteSend[8];
     int   i;   
        CByteArray   arraySend; 
      
         byteSend[0]=01;
         byteSend[1]=0x06;
         byteSend[2]=0x11;
         byteSend[3]=0x01;
         byteSend[4]=0x00;
         byteSend[5]=0x00;
          byteSend[6]=0xDC;
          byteSend[7]=0xCA;
     arraySend.RemoveAll();   
     arraySend.SetSize(8);   
     for(i=0;i<8;i++)   
     {   
      arraySend.SetAt(i,byteSend[i]);    
     }   m_pCj_Tarck->m_SerialPort.WriteToPort(COleVariant(arraySend));错误提示 error C2664: 'void __thiscall CSerialPort::WriteToPort(char *)' : cannot convert parameter 1 from 'class COleVariant' to 'char *'以前是用CMSCOMM类进行串口通讯,现在想学习下使用CSerialPort类和多线程,遇到不小的麻烦,网上也查了很长时间,但一直不是很理解,各位大侠如果知道的话,不吝赐教!
      

  6.   

    WriteToPort用char *做为参数。
    那么
    char charSend[8];
      charSend[0]=01;
      charSend[1]=0x06;
      charSend[2]=0x11;
      charSend[3]=0x01;
      charSend[4]=0x00;
      charSend[5]=0x00;
      charSend[6]=0xDC;
      charSend[7]=0xCA;
    m_pCj_Tarck->m_SerialPort.WriteToPort(charSend);
      

  7.   

    编译能通过了,
    多了个warning C4305: '=' : truncation from 'const int' to 'char'我试下能不能通讯
      

  8.   

    有人在吗?writetoport只能发送char型吗?  但是我的校验位是unsigned char啊,这该怎么办啊?