|
?Windows
の通信プログラムをつくるには |
Q: パソコンとNCの通信プログラムを書くにはどうしたら良いでしょう? |
A: 通信は結構手間のかかる作業なので、頑張って下さい。
|
|
「通信リソースの構成」参照
Win32
API
プログラマーズリファレンス |
DCB
dcb;
//DCB構造体へのポインタ
HANDLE
hCom; //
通信ファイルのハンドル
DWORD
dwError;
BOOL
fSuccess; |
|
//
シリアルポートのオープン |
hCom
=
CreateFile("COM1",GENERIC_READ
| GENERIC_WRITE,0,NULL); |
|
if
(hCom ==
INVALID_HANDLE_VALUE) {
dwError =
GetLastError(); //
ポートのオープンに失敗したときの処理
} |
|
fSuccess
= GetCommState(hCom,
&dcb); //
設定の取り込み
if
(!fSuccess) {
/*
handle error * //
設定の取り込みに失敗したときの処理
} |
|
dcb.BaudRate
= 9600; //
具体的な通信の設定をします
dcb.ByteSize
= 8;
dcb.Parity
= NOPARITY;
dcb.StopBits
= ONESTOPBIT;
fSuccess
= SetCommState(hCom,
&dcb); //
設定を反映させる
if
(!fSuccess) {
/*
handle error */ //
設定に失敗したときの処理
} |
|
//
ここから実際のデータの読み書きをします |
WriteFile(hCom,
・・・) //
データの書き込み |
ReadFile(hCom,
・・・) //
データの読み込み |
|
//
書き込み・読み込み時のエラー検出 |
//
WriteFile/ReadFile
が失敗したときの処理 |
//
書き込み・読み込みバイト数と実際に書き込み・読み込みされたバイト数を |
//
比較するのもエラー検出として有効な手段だと思います |
//
正常に読み書きの処理が終了したら、オープンしたポートを閉じます。 |
|
CloseHandle(hCom); //
シリアルポートのクローズ |
|
これが基本的な流れになります。実際には、この一連の処理をスレッドで行う |
ように組まれたほうがより実用的です。 |
|
下記を参照して書き込んでいます。著作権にふれそうなので |
詳細については、Win32
API
プログラマーズリファレンス(ヘルプ)、 |
アスキー出版局
「Windows95
通信プログラミング」 |
Charles
A.Mirho/Andre Terrisse
著 梅原 系 訳 |
を、ご覧になって下さい。 |
|