Avatar billede jvt Nybegynder
02. april 2003 - 23:43 Der 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??
Avatar billede mortrr Praktikant
03. april 2003 - 00:12 #1
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
Avatar billede jvt Nybegynder
03. april 2003 - 00:18 #2
jeg prøver lige...
Avatar billede mortrr Praktikant
03. april 2003 - 00:22 #3
Blev nysgerrig og fandt min vb frem.

Nej - det var ikke det.
Ligner en unhandled exception i ocx'en.

Hvordan var det nu...
Avatar billede jvt Nybegynder
03. april 2003 - 00:25 #4
Nej, det hjalp desvære ikke.. :-(
Avatar billede mortrr Praktikant
03. april 2003 - 00:28 #5
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
Avatar billede jvt Nybegynder
03. april 2003 - 00:28 #6
"Ligner en unhandled exception i ocx'en."

Håber du har en forklaring på dansk ;-)
Avatar billede mortrr Praktikant
03. april 2003 - 00:28 #7
Og så lige en
On Error Goto 0
efter Loop
Avatar billede mortrr Praktikant
03. april 2003 - 00:38 #8
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.
Avatar billede jvt Nybegynder
03. april 2003 - 00:39 #9
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester