
Собрал из примеров: 1)http://forum.gsmhosting.com/vbb/archive/index.php/t-141789.html
2)http://www.mev.co.uk/w32comms.bas
программу для работы с serial-портом (WinXP Sp2).
На разъем COM-порта, ногу 1(CD) внешним генератором подается меандр. -9v(125mSec), затем +9v(125mSec).
Программа не реагирует на прерывание при изменении сигнала CD. Не могу разобраться почему так!    
Возможно, перевел команды из примера на Delphi > VB6 не правильно? Delphi я не знаю. 
Еще вопрос: "Как узнать куда пойдет вектор прерывания когда возникнет условие прерывания?"
Фрагмет кода:
Private Declare Function SetCommMask Lib "kernel32" (ByVal hFile As Long, ByVal dwEvtMask As Long) As Long
Private Declare Function GetCommMask Lib "kernel32" (ByVal hFile As Long, lpEvtMask As Long) As Long
WaitCommEvent Lib "kernel32" (ByVal hFile As Long, lpEvtMask As Long, FILE_FLAG_OVERLAPPED As OVERLAPPED) As Long 
typedef struct _OVERLAPPED {
      DWORD  Internal;
      DWORD  InternalHigh;
      DWORD  Offset;
      DWORD  OffsetHigh;
      HANDLE hEvent;
   } OVERLAPPED, *LPOVERLAPPED;
--------------------------------
Private Type OVERLAPPED
        Internal As Long
        InternalHigh As Long
        offset As Long
        OffsetHigh As Long
        hEvent As Long
End Type
--------------------------------
BOOL WaitCommEvent(
      HANDLE       hFile,
      LPDWORD      lpEvtMask,
      LPOVERLAPPED lpOverlapped,
   );
---------------------------------
Private Sub CommandButton5_Click()
'-------------------------------------------------------------------------------
Dim blnState As Byte
intPortID = 1
blnState = CommSetLine(intPortID, LINE_RTS, 1)   'Rabotaet Verno!
blnState = CommSetLine(intPortID, LINE_DTR, 1)   'Rabotaet Verno!
Dim lngModemStatus As Long
Dim msec1&, msec01&
'Delphi         SetCommMask(port,EV_RXCHAR);
'Delphi         WaitCommEvent(port,&mask,NULL);
     lngStatus = SetCommMask(udtPorts(intPortID).lngHandle, LINE_CD)
   MsgBox "SetCommMaskStatus = " & Str(lngStatus)
    lngStatus = WaitCommEvent(udtPorts(intPortID).lngHandle, LINE_CD, udtCommOverlap)
   MsgBox "WaitCommEventStatus = " & Str(lngStatus)   
   msec1& = GetTickCount& 
    Pause (5)
      msec01& = GetTickCount&    
   MsgBox "Period (msec) = " & Str(msec01& - msec1& )
End Sub
Вариант 
Do While State_Port(State) = 0
 DoEvents
  Loop 
не устраивает, так как сильно загружает ЦП.
Буду рад получить полезный ответ!!