2016年1月7日木曜日

MFC VC++6.0 シリアル通信の注意点

MFC VC++6.0 シリアル通信の注意点

シリアル通信を行う場合の注意点は以下です。

・COMナンバーに¥¥¥¥.¥¥を付加する
    (COM1~9なら¥¥¥¥.¥¥を付加しなくても問題なくオープンします)

・CreateFileAを使ってCOMオープン
    (VC++上位互換を意識しないのならCreateFileでもオープンします)

-------------------------------------------------------

bool Open(int ComNum, int baudrate, BYTE parity, BYTE stopbit ) // シリアルポートを開く
{
char szSerial[256];
sprintf( szSerial, "¥¥¥¥.¥¥COM%d", ComNum); // ■¥¥¥¥.¥¥を付加する

if( NowCom != 0 ){ // すでにオープンのとき
Close( NowCom );
}

Shandle = CreateFileA( // ■CreateFileAを使ってCOMオープン
        szSerial,
        GENERIC_READ | GENERIC_WRITE,
        0,
        NULL,
        OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL, // 非同期モード : 受信してなくても戻る
        NULL
        );

    if( Shandle == INVALID_HANDLE_VALUE) { // COMオープンできなかったとき
        Shandle = NULL;
NowCom = 0;
return FALSE;
    }

NowCom = ComNum; // COM確定
HandleAry[NowCom] = Shandle; // ハンドル登録

    if( !InitDCB( baudrate, parity, stopbit ) ){ // DCB構造体の初期化に失敗したとき
        return FALSE;
    }

    if( !InitCommTimeOuts() ){ // COMタイムアウト構造体設定に失敗したとき
        return FALSE;
    }

    return TRUE;
}