none
シリアルポートから受信したい RRS feed

  • 質問

  • 宜しくお願いします。

    開発環境は、WindowsXP Visual Studio 2005 VC++  MFC

    以下のコードを実行すると、受信が遅い、受信結果が文字化けする現象がでています。

    ハイパーターミナルどうしで送受信が正常に動くのを確認した後に、ハイパーターミナルを

    以下のプログラム間ではうまくいきません。

     

        CString BufCom;
        BOOL    bRet;
        hCom = CreateFile("COM1",                       // ファイル名
                          GENERIC_READ + GENERIC_WRITE, // アクセスモード
                          0,                            // 共有モード
                          NULL,                         // セキュリティ記述子
                          OPEN_EXISTING,                // 作成方法
                          FILE_ATTRIBUTE_NORMAL,        // ファイル属性
                          NULL);                        // テンプレートファイルのハンドル
        if(hCom == INVALID_HANDLE_VALUE)
        {
            LPVOID lpMsgBuf;
            FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                FORMAT_MESSAGE_FROM_SYSTEM |
                FORMAT_MESSAGE_IGNORE_INSERTS,
                NULL,
                GetLastError(),
                MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
                (LPTSTR)&lpMsgBuf,
                0,
                NULL);

            MessageBox((LPCWSTR)lpMsgBuf,_T("BC-System"),MB_OK + MB_ICONWARNING+MB_TOPMOST);

            return;
        }

        bRet = GetCommState(hCom, &dcb);
     if(!bRet)
        {
            LPVOID lpMsgBuf;
            FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                FORMAT_MESSAGE_FROM_SYSTEM |
                FORMAT_MESSAGE_IGNORE_INSERTS,
                NULL,
                GetLastError(),
                MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
                (LPTSTR)&lpMsgBuf,
                0,
                NULL);

            MessageBox((LPCWSTR)lpMsgBuf,_T("BC-System"),MB_OK + MB_ICONWARNING+MB_TOPMOST);

            CloseHandle(hCom);

            return;
        }


        dcb.BaudRate = CBR_9600;
        dcb.Parity = NOPARITY;
        dcb.ByteSize = 8;
        dcb.StopBits = ONESTOPBIT;
        dcb.fOutxDsrFlow = TRUE;
        dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;

        bRet = SetCommState(hCom, &dcb);
     if(!bRet)
        {
            LPVOID lpMsgBuf;
            FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                FORMAT_MESSAGE_FROM_SYSTEM |
                FORMAT_MESSAGE_IGNORE_INSERTS,
                NULL,
                GetLastError(),
                MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
                (LPTSTR)&lpMsgBuf,
                0,
                NULL);

            MessageBox((LPCWSTR)lpMsgBuf,_T("BC-System"),MB_OK + MB_ICONWARNING+MB_TOPMOST);

            CloseHandle(hCom);

            return;
        }

        bRet = EscapeCommFunction(hCom, SETRTS);
     if(!bRet)
        {
            LPVOID lpMsgBuf;
            FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                FORMAT_MESSAGE_FROM_SYSTEM |
                FORMAT_MESSAGE_IGNORE_INSERTS,
                NULL,
                GetLastError(),
                MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
                (LPTSTR)&lpMsgBuf,
                0,
                NULL);

            MessageBox((LPCWSTR)lpMsgBuf,_T("BC-System"),MB_OK + MB_ICONWARNING+MB_TOPMOST);

            CloseHandle(hCom);

            return;
        }

        BOOL  bRet;
        char  Buf[256];
        DWORD Siz;
        MSG   msg;

     

        bRet = ReadFile(hCom,           // ファイルのハンドル
                            Buf,              // データバッファ
                            16,             // 読み取り対象のバイト数
                            &Siz,           // 読み取ったバイト数
                            NULL);          // オーバーラップ構造体のバッファ

            if(bRet == 0)
            {
                LPVOID lpMsgBuf;
                FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                              FORMAT_MESSAGE_FROM_SYSTEM |
                              FORMAT_MESSAGE_IGNORE_INSERTS,
                              NULL,
                              GetLastError(),
                              MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
                              (LPTSTR)&lpMsgBuf,
                              0,
                             NULL);

                MessageBox((LPCWSTR)lpMsgBuf,_T("BC-System"),MB_OK + MB_ICONWARNING+MB_TOPMOST);
            }else if(Siz > 0){

                txtNGSetupBC.SetWindowTextW(Buf);
            }

        }

    2007年10月25日 8:35