Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C++] Invalid port number, jak uniknąć?

SACZI 07 Lis 2004 19:52 1170 4
  • Poziom 16  
    Taki komunikat otrzymuję, gdy próbuje otworzyć nieistniejący port komunikacyjny RS232c.

    Moje pytanie dotyczy metody sprawdzenia ile i które porty są dostępne w chwili uruchhamiania aplikacji.

    Piszę w C++ Builder, ale wykorzystuje kontrolkę z VB MSComm.
    Proszę o podanie jakiejkolwiek metody na sprawdzenie tego lub jakieś linki.
    Nie wiem nawet czego i pod jakimi hasłami szukać w necie.

    Zamykam. - arnoldziq
  • Poziom 42  
    SACZI napisał:
    Taki komunikat otrzymuję, gdy próbuje otworzyć nieistniejący port komunikacyjny RS232c.
    Moje pytanie dotyczy metody sprawdzenia ile i które porty są dostępne w chwili uruchhamiania aplikacji.
    Polega to na tym że właśnie próbujesz "otwierać" port, a on mówi że nie można, to wtedy już wiesz że nie ma portu, bądź jest zablokowany przez inny program.
  • Poziom 16  
    No chyba niezupełnie. Robiłem taka próbę z otwieraniem nieistniejacego w systemie portu. Program wywalał mi błąd (lub innymi słowy wyjatek) i się zawieszał.
    Sprawdzanie, który port jest otwarty, a który nie to nie jest metoda, o której myśle. Na to sam już wpadłem.
    Chodzi mi dokładnie o sprawdzenie, które porty fizycznie istnieją w systemie.
    np:
    Code:

    for (i=0; i=16, i++)
    {
        sprawdź_port(i);
          if(sprawdź_port(i)) checkbox(i)->enabled = true;
           else checkbox(i)->enabled = false;
    }


    Problem jest z tym, jak napisac ta funkcję sprawdź_port.
    I powtarzam, nie chodzi mi tylko o kontrolę, czy dany port jest zajęty, czy nie (bo to nie problem), a o sprawdzenie jego istnienia w systemie.
  • Poziom 22  
    Wyciągnij te informacje z rejestru, w przypadku win2000 i XP info o włączonych portach szeregowych jest w kluczu:
    HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\5\SerialController
    równoległy odpowiednio też w kluczu wyżej.
  • Poziom 16  
    faber, niestety, podana przez Ciebie metoda nie przejdzie, chociaż jest ciekawa. Sprawdzałem podany przez Ciebie klucz pod Windowsem NT4 i XP i w każdym końcówka się różniła.
    Jednak znalazłem rozwiaznie problemu, jest nim funkcja CreateFile; pokazany kod jest "łamany", wywołanie funkcji napisane jest w VB, natomiast jak ktoś bedzie chciał to wykorzystac, domyśli sie:
    Code:

    hCOM = CreateFile("COM" & COMNum & "", 0, FILE_SHARE_READ + FILE_SHARE_WRITE, sec, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)

    if (hCOM)
       {
          port_istnieje
        }
    else
       {
          port_nie_istnieje
       }

    Jest to nb podobny sposób jaki proponował elektryk. Nie mozna jednak otwierać portu, który nie istnieje. CreteFile sprawdza, czy istnieje port i oto mi chodziło.
    Problem w sumie prosty, ale dotarcie do rozwiązania zajęło mi tydzień.