|
| ?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
著 梅原 系 訳 |
| を、ご覧になって下さい。 |
 |