|
우선 책에 나온 폼에 콤포넌트 2개 추가있습니다
콤보박스(Name: PortComboBox)하구 버튼(SndButton)
그리구 폼이벤트중에 OnCreate추가
콤보박스 이벤트 OnChange추가
마지막으로 에러나던 전송함수부분에 비교문 하나 추가(예외저리보다 이게 쉬울거 같네요)
버튼은 포트가 활성화 될때만 enable되도록 했구요
버튼을 눌렀을때 OnClick처리는 직접해보세요.
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
int CommCount;
AnsiString CommName;
for(CommCount=1;CommCount<PORT_MAX;CommCount++)
{
CommName="COM"+IntToStr(CommCount);
hComm=CreateFile(CommName.c_str(),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if(hComm!=INVALID_HANDLE_VALUE) PortComboBox->Items->Add("COM"+IntToStr(CommCount));
CloseHandle(hComm);
}
SndButton->Enabled =false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PortComboBoxChange(TObject *Sender)
{
CloseHandle(hComm);
hComm=CreateFile(ComboBox1->Items->Strings[ComboBox1->ItemIndex].c_str(),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if(hComm==INVALID_HANDLE_VALUE)
{
MessageDlg("Not open port: "+PortComboBox->Items->Strings[PortComboBox->ItemIndex],mtError,TMsgDlgButtons()<<mbOK,0);
SndButton->Enabled =false;
}
else SndButton->Enabled =true;
}
//---------------------------------------------------------------------------
int __fastcall TForm1::NewWriteString(char *pszString, int cbString)
{
int i;
LONG Irc;
if(hComm!=INVALID_HANDLE_VALUE)
{
for(i=0;i<cbString;i++)
{
char Ch=pszString[i];
if(!WriteFile(hComm,(LPBYTE)&Ch,(LPDWORD)&Irc,NULL))
CommError(GetLastError());
}
return cbString;
}
return 0;
}
//---------------------------------------------------------------------------
|