none
EVC下的BuildCommDCB命令 RRS feed

  • 常规讨论

  • 把VC开发的串口程序向wince平台上移植的时候,我相信不少朋友一定会遇到这样的问题,就是BuildCommDCB命令在wince平台不支持,为了使evc程序与vc程序保持一致,只好自行编写BuildCommDCB命令,下面是我写的代码,有兴趣的朋友可以参考一下:

     

    程序块

    long BuildCommDCB(LPTSTR szMsg,DCB *dcb)
    {
        long BaudRate=9600,Parity=0,ByteSize=8,StopBits=0;
     TCHAR strConfig[255];
     ULONG i,j=0,e=0,lngFlag=0;
     for(i=0;i<wcslen(szMsg);i++)
     {
      if(szMsg[i-1]==_T(':') || szMsg[i]==_T(','))
      {
            lngFlag=1;
      }
           
      if(lngFlag==1)
      {
         strConfig[j++]=szMsg[i];
      }
           
      if((j>0 && szMsg[i]==_T(',')) || i==wcslen(szMsg)-1)
      {
         strConfig[j-((i==wcslen(szMsg)-1) ? 0:1)]=_T('\0');
         j=0;
         switch(e++)
         {
         case 0:
                  swscanf(strConfig,_T("%ld"),&BaudRate);
         break;
         case 1:
         // 0-4=None,Odd,Even,Mark,Space   
         switch (strConfig[0])
         {
         case _T('n'):
         case _T('N'): Parity=0;break;
         case _T('o'):
         case _T('O'): Parity=1;break;
         case _T('e'):
         case _T('E'): Parity=2;break;
            case _T('m'):
         case _T('M'): Parity=3;break;
         case _T('s'):
         case _T('S'): Parity=4;break;
         }
         break;
         case 2:
         swscanf(strConfig,_T("%ld"),&ByteSize);
         case 3:
         // 0,1,2 = 1, 1.5, 2              
         if(wcscmp(strConfig,_T("1"))==0)
         {
          StopBits=0;
         }
         else if(wcscmp(strConfig,_T("1.5"))==0)
         {
          StopBits=1;
         }
         else if(wcscmp(strConfig,_T("2"))==0)
         {
          StopBits=2;
         }
         break;    
         }
      }
     }

     if (e==4)
     {
            dcb->BaudRate=BaudRate;
      dcb->Parity=(BYTE)Parity;
      dcb->ByteSize=(BYTE)ByteSize;
      dcb->StopBits=(BYTE)StopBits;
      return 0;
     }
     else
     {
      return -1;
     }
    }

     

     

    2007年10月23日 15:00
    版主

全部回复