Moja aplikacja Delphi (przy użyciu XE3) musi obsługiwać wyjątek EInOutError występujący po usunięciu portu szeregowego USB. Aplikacja jest używana w środowisku testowym, więc nie może polegać na tym, że operator kliknie przycisk OK, aby zamknąć okno dialogowe Błąd aplikacji.Jak obsługiwać wyjątek, gdy port szeregowy USB zostanie nieoczekiwanie usunięty?
Próbowałem następujące:
„Wypróbuj .. z wyjątkiem” metody - to nie złapać tych wyjątków. Myślę, że to nie działa, ponieważ wyjątek nie jest spowodowany przez kod w bloku "try". Wygląda na wyjątek niższego poziomu na poziomie systemu.
Próbowałem dodać do formularza formularz "ApplicationEvents". Metoda OnException przechwytuje wyjątek "niestandardowy" wygenerowany przez moją aplikację, ale nie wyjątek na poziomie systemu.
Próbowałem również dodać globalny hak wyjątku (jak opisano w Is it possible to have a global exception hook?). To działa częściowo - pozwala mi to na robienie pewnych rzeczy w oknie dialogowym Błąd aplikacji, ale nie zatrzymuje okna błędu.
Byłbym wdzięczny za wszelkie pomysły!
Jeśli blok try-except nie wychwytuje wyjątku, to albo wyjątek nie występuje tam, gdzie myślisz, że jest przechwytywany i obsługiwany przez inny kod wcześniej niż " próbuję to złapać, albo nie jest to wyjątek. Ponieważ nie możesz go złapać, skąd wiesz, że jest to wyjątek EInOutError? –
Czy odbierasz wiadomość WM_DEVICECHANGE o typie DBT_DEVICEREMOVECOMPLETE i DBT_DEVTYP_PORT po odłączeniu portu USB? – MBo
Witam Rob, pojawia się okno dialogowe zatytułowane "Błąd aplikacji", który pojawia się. Komunikat w oknie dialogowym to "Exception EInOutError in module Project1.exe at 001C7052." To uruchamia aplikację poza IDE/debuggerem. – Nigel