|
C++ Builder 6 에서
Usb 시리얼 통신 제거시 아래와 같이 사용하는데
XP에서는 asCOMPortNo 에 정상적으로 'COM1' 이런식으로 정상 동작 되는데
Win 7 에서는 asCOMPortNo 값이 'C' 요러고 나와요
제가 운영체제가 XP라서 Win 7에서는 디버깅으로 보진 못했는데 혹시 원인을 아시나요?
제가 초보라서 Win 7과 XP의 차이점을 잘몰라서요...
부족한 제글 읽어 주셔서 감사합니다.
void __fastcall TRD_PsSPForm::OnMessages(Messages::TMessage &Message)
{
PDEV_BROADCAST_HDR pdbch = (DEV_BROADCAST_HDR *)Message.LParam;
PDEV_BROADCAST_PORT pdbcp = (PDEV_BROADCAST_PORT)Message.LParam;
//PDEV_BROADCAST_VOLUME pdbcv = (PDEV_BROADCAST_VOLUME)Message.LParam;
if(Message.Msg == WM_DEVICECHANGE) //USB 장치 연결상태변화
{
switch(Message.WParam)
{
case DBT_DEVNODES_CHANGED: //0x0007
/*
* Message = WM_DEVICECHANGE
* wParam = DBT_QUERYCHANGECONFIG
* lParam = 0
*
* sent to ask if a config change is allowed
*/
break;
case DBT_DEVICEARRIVAL : //0x8000 // system detected a new device
//USB에 새로운 장치가 연결되어 사용가능한 상태가 된 경우...
if(pdbch->dbch_devicetype == DBT_DEVTYP_PORT)
{
char *COMPortNo = pdbcp->dbcp_name;
asTmp.sprintf("[%s] 포트가 시스템에 생성되었습니다", COMPortNo);
if(ComPort1->Port == COMPortNo && RD_PsConnectButton->Caption == "Disconnect" )
{ //재접속
RD_PsInterfaceStart();
FormStorage1->SaveFormPlacement();
}
ShowMessage(asTmp);
// COMPort_PortCheck();
}
//ShowMessage("system detected a new device");
break;
case DBT_DEVICEREMOVECOMPLETE : //0x8004 // device is gone
// USB에서 어떤 장치가 제거된 경우..
if(pdbch->dbch_devicetype == DBT_DEVTYP_PORT)
{
char *COMPortNo = pdbcp->dbcp_name;
ShowMessage(pdbcp->dbcp_reserved);
AnsiString asCOMPortNo;
asCOMPortNo.sprintf("%s",COMPortNo);
asTmp.sprintf("[%s] 포트가 시스템에서 제거되었습니다", COMPortNo);
ShowMessage(asTmp);
if(ComPort1->Port == asCOMPortNo)
{
if(ComPort1->Connected)
{ //Open 된 ComPort 같은것이 제거된경우 Close() 처리
RD_PsInterfaceEnd();
}
}
// COMPort_PortCheck();
}
//ShowMessage("device is gone");
break;
}
}
else
{
//TForm::WndProc(Message);
}
Message.Result = true;
}
|