我的程序需要在WINCE下和一块不支持UNICODE的卡通信。我在发送函数里用
WideCharToMultiByte( CP_ACP, 0, buf, -1, temp, 256, NULL, NULL );
fWriteState=WriteFile(hPort,temp,dwCharToWrite,&dwBytesWritten,NULL);
把UNICODE转换成ASCII通过串口发送。在接收函数里用
fReadState=ReadFile(hPort,temp,dwLength,&dwLength,NULL);
MultiByteToWideChar(CP_ACP,0,temp,strlen(temp)+1,buf,sizeof(buf)/sizeof(buf[0]));
把ASCII码转换成UNICODE,结果显示出来的不正确。如我发送“123”,接收到“12”,而当我发“12345678”的时候,接收也是“12”,不知道是哪出了问题?

解决方案 »

  1.   

    你先把你要发送的ASC码,用MultiByteToWideChar转化一下,看看结果对不对。
    然后你的WriteFile中dwCharToWrite,&dwBytesWritten这两个参数值是多少?
      

  2.   

    你的意思是不是说先把UNICODE的转换成ASCII,再转换回去,看其中是否出错?
    我的写函数如下:
    DWORD CSerial::WritePort(TCHAR *buf,DWORD dwCharToWrite)
    {
    BOOL fWriteState;
    DWORD dwBytesWritten;
    char *temp=new char[256];

    WideCharToMultiByte( CP_ACP, 0, buf, -1, temp, 256, NULL, NULL );
    fWriteState=WriteFile(hPort,temp,dwCharToWrite,&dwBytesWritten,NULL);
    if(!fWriteState)
    {
    MessageBox(NULL,TEXT("Can't Write"),TEXT("Error"),MB_OK);
    dwBytesWritten=0;
    } return dwBytesWritten;
    }