如何判断串口是否已经打开

怎么判断串口是否已经打开
用的API函数,比如在关闭串口前,需要先判断下是否已经打开,不然会报错,但是怎么判断呢,貌似不像串口控件那么简单

------解决方案--------------------
m_idComDev=CreateFile(m_sPort, // com1,2
    GENERIC_READ
------解决方案--------------------
GENERIC_WRITE,
  0,       // sharemode 0=no share
  NULL,    // &sa
  OPEN_EXISTING,
  FILE_ATTRIBUTE_NORMAL
------解决方案--------------------
FILE_FLAG_OVERLAPPED,
  NULL);   // tempfile 
//

void CDload::CloseConnection()
{
if (!m_bConnected) return;
m_bConnected=FALSE;
SetCommMask(m_idComDev,0);
if (!m_pThreadCTS->m_hThread)

// terminate CommWatchEvent()
SetEvent(m_hPostEventCTS);
WaitForSingleObject(m_pThreadCTS->m_hThread,INFINITE);
}
m_pThreadCTS=NULL;
if ((m_pThreadWrite) && (!m_pThreadWrite->m_hThread))
{ // if "start" && 
// terminate CommWatchWrite 
SetEvent(m_osWrite.hEvent);// if in 60s' waiting 
SetEvent(m_hPostEventWrite);
WaitForSingleObject(m_pThreadWrite->m_hThread,INFINITE);
}
m_pThreadWrite=NULL;
// reset RTS
EscapeCommFunction(m_idComDev,CLRRTS);
//  close Comm
PurgeComm(m_idComDev,PURGE_TXABORT 
------解决方案--------------------
 PURGE_RXABORT
------解决方案--------------------

 PURGE_TXCLEAR 
------解决方案--------------------
 PURGE_RXCLEAR);
// 
CloseHandle(m_idComDev);
}

------解决方案--------------------
“但是如果串口被别的程序打开”
如果 你先 打开 , 则你不关, 别人打不开的。
如果 别人已打开, 则 你是 打不开的。
------解决方案--------------------
设一个全局变量啊 bool flag=FLASE;
在打开串口里令flag=TRUE;
在关闭串口里判断
if(flag==TRUE)
{CloseHandle(hcom);}
------解决方案--------------------
CreateFile以独占方式打开,如果报错,查看GetLastError函数返回的错误码,就可以判断是否已经打开了