02. april 2003 - 23:43Der er
8 kommentarer og 1 løsning
Finde gyldige COM porte
Hej. Jeg sidder med Visual Basic 6.0 SP 5 og forsøger at kode lidt til COM portene. Det har jeg ikke problemer med. Men jeg har et mindre problem med at finde ud af, hvilke COM porte der findes på PC'en - programmerings mæssigt.
Ifølge hjælpen, vil
MSComm1.CommPort = i MSComm1.PortOpen = True
give en fejl, hvis porten ikke findes.
Derfor har jeg lavet dette lille stykke kode (del af en størrer samling kode):
test: On Error GoTo fejl Do While i < 17 MSComm1.CommPort = i MSComm1.PortOpen = True MSComm1.PortOpen = False cmbOutputCOM.AddItem "COM " & i cmbInputCOM.AddItem "COM " & i i = i + 1 Loop Exit Sub fejl: Debug.Print "COM port nr: " & i Debug.Print Err.Number & " - " & Err.Description i = i + 1 GoTo test
Det går fint første gang, der førsøges at åbne en port som ikke findes. Dvs, kompileren smutter ned og udfører den kode der står under fejl: og smutter derefter op til test:. Men ved næste ugyldige port, standses programmet med en fejl om, at porten ikke findes, dvs. den springer uden om Error handleren. HVORFOR???
Nogen der har en forklaring, eller ved hvad jeg ellers kan gøre for at indsamle oplysninger om de COM porte der findes på et system??
Nu er det godt nok et stykke tid siden jeg har brugt det, men skal error handleren i vb ikke "nulstilles"?
test: On Error GoTo fejl Do While i < 17 MSComm1.CommPort = i MSComm1.PortOpen = True MSComm1.PortOpen = False cmbOutputCOM.AddItem "COM " & i cmbInputCOM.AddItem "COM " & i i = i + 1 Loop Exit Sub
fejl:
On error Goto 0 ' <-- her
Debug.Print "COM port nr: " & i Debug.Print Err.Number & " - " & Err.Description i = i + 1 GoTo test
Sån: On Error Resume Next Do While i < 17 Err.Clear MSComm1.CommPort = i If Err.Number = 0 Then MSComm1.PortOpen = True If Err.Number = 0 Then cmbOutputCOM.AddItem "COM " & i cmbInputCOM.AddItem "COM " & i MSComm1.PortOpen = False End If End If i = i + 1 Loop
Den med "unhandled exception" - normalt burde det have virket det du skrev, men det hænder at exceptions/fejl i ocx'er af en eller anden grund ikke kan håndteres inde i VB. Det skulle have været nok med en Err.Clear og derefter en ny On Error goto test.
Du skal have mange tak for hjælpen. Du har reddet min nattesøvn :-)
"Og så lige en On Error Goto 0 efter Loop" er ikke nødvendigt, da kodedelen i dette spørgsmål er den sidste i funktionen, men tak alligevel
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.