データの受信 ReadFile関数

サンプルプログラム


    HANDLE hCom;
    DWORD dwCount;
    char* rdBuf;
    DWORD dwRead;

    ReadFile(hCom, rdBuf, dwCount, &dwRead, NULL);

解説

ReadFile(hCom, rdBuf, dwCount, &dwRead, NULL)

hCom:書き込みをするシリアルポートのハンドルを指定します。CreateFileの戻り値を使います。

rdBuf:データを格納するための変数へのポインタを渡します。

dwCount:受信するバイト数を指定します。同期通信の場合、このバイト数だけ受信するまで制御が戻りません。

&dwRead:実際に受信したバイト数が格納されます。

NULL:同期通信の場合にはNULLを指定します。 この場合、指定したバイト数だけデータを受け取るまで、 制御が戻りません。

ポートの状態を取得 ClearCommError関数

上記のように、同期通信でシリアルポートのデータを読み込む場合に、 読み込むバイト数をうまく指定してやらないと、いつまでも受信待ち状態で止まったままになってしまいます。 これを解決する方法のひとつは、あらかじめ ClearCommError関数を用いてポートの状態を取得し、 受信バッファのバイト数を調べることです。

サンプルプログラム


    HANDLE hCom;
    DWORD dwErrors;
    COMSTAT ComStat;
    DWORD dwCount;
    char* rdBuf;
    DWORD dwRead;

    ClearCommError(hCom, &dwErrors, &ComStat);
    dwCount=ComStat.cbInQue;
    ReadFile(hCom, rdBuf, dwCount, &dwRead, NULL);

解説

ClearCommError(hCom, &dwErrors, &ComStat)

hCom:書き込みをするシリアルポートのハンドルを指定します。CreateFileの戻り値を使います。

&dwErrors:エラー情報を格納する変数へのポインタを渡します。

&ComStat:COMSTAT構造体へのポインタを渡します。 この構造体のメンバのうち、cbInQueに受信バッファのバイト数が格納されます。

dwCount=ComStat.cbInQue;

COMSTAT構造体のcbInQueメンバの値(受信バイト数)をdwCountに格納します。

since 2004/07/12(Mon)

BorlandC++Compilerの目次へ

トップページへ

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送