BCB6.0でのCOM設定方法
BCB初心者なのですが、BCBを使用してシリアル通信を行なっています。
COM設定が不定な状態で使用することになり、設定できるようにしたのですがエラーが発生してしまいます。
[Unit1.cpp側]
if (!CommOpen()){
Application->MessageBox("ポートを開けません","回線オープン",MB_ICONEXCLAMATION | MB_OK);
return;
}
[Unit1.h側]
int FChPort; // シリアルポートナンバー
HANDLE hCom;
DCB comdcb;
COMMTIMEOUTS comtout;
BOOL CommOpen()
{
FChPort = 1;
//シリアルポートのオープン
char szComPort[10];
wsprintf(szComPort, "COM%d", FChPort);
hCom = CreateFile( szComPort, GENERIC_READ | GENERIC_WRITE, 0, NULL,OPEN_EXISTING, 0, NULL );
if(hCom==INVALID_HANDLE_VALUE){
return FALSE;
}
return TRUE;
}
上記が現状です。
RadioButton1~9にはCaptionが「COM1」~「COM9」になっているため
CheckされているCaptionの、右から1文字をCOMポート設定に割り当てたいと考えています。
そこで、
FChPort = 1;
の部分を
FChPort = StrToInt(RightStr(Unit1->RadioButton1->Caption,1));
に変更したのですが、デバッガ例外が発生し、読み込み違反があったというエラーが発生してしまいました。
(例としてRadioButton1で試しました。)
なぜなのでしょうか?
また、このような場合、どのようにすればCOM設定ができるのか教えていただきたいのですが…。
よろしくお願いします。
開発環境はWindows XPです。
お礼
GetLastErrorで調べたところ、確かに違うエラーコードを返しているのが確認できました。ポートは存在するけどすでに開かれていて使えない場合は「ACCESS_DENINED」というエラーを返すので、これをチェックすることでポートの有無を判断できました。アドバイスありがとうございました。 またネットで色々調べてみたところ、レジストリの「HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM」というキー内に、存在するポートがすべて列挙されているということが分かりました。(Windows2000/XP以降のみ有効)同じ疑問を持った方は参考にしてください。