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;
}
シリアル通信を行う場合の注意点は以下です。
・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;
}