Nie odnaleziono pliku - obsługa błędu

0

Witam.
Zrobiłem program, który statycznie ładuje prodedury i funkcje z pliku dll.
Jeśli zmienie nazwę pliku dll to pojawi mi się błąd 'Nie można odnaleźc składnika. Uruchomienie tej aplikacji nie powiodło się, ponieważ nie znaleziono Plik.dll'. Czy jest jakaś możliwośc, żeby obsłużyć ten błąd i uruchomić jednak program? Ładowanie z biblioteki mam przed begin, więc chyba nie mogę tam zrobić po prostu try except?

0

Musisz tą bibliotekę dynamicznie, poczytaj sobie o tym na google.

0

Musisz tą bibliotekę dynamicznie, poczytaj sobie o tym na google.

Oj tak to wychodzi jak się szybko pisze, oczywiście chodziło o:
Musisz tą bibliotekę ładować dynamicznie, poczytaj sobie o tym na google.

Jakiś dobry admin pewnie wywali stary post.

0

Znaczy statycznie nie da się? Ładuję statycznie, bo potem wszystkich funkcji i procedur używam. Dynamicznie by było nieopłacalne.

1

Tak jak pisał poprzednik, ładuj dynamicznie funkcje i procedury, ale rób to dopiero kiedy sprawdzisz czy JakisHandle := LoadLibrary('twojadllka.dll') będzie różne od zera. A i w ogóle nie bardzo rozumiem co Ty "ćwiczysz". Piszesz dllkę, chcesz ją obsłużyć statycznie, a przed uruchomieniem programu ją wywalasz albo zmieniasz jej nazwe, to jak niby ma się ona załadować. Jak Ci bardzo przeszkadza to że dllka jest na dysku, a wolisz ją ładować z zasobów i obsłużyć, skorzystaj z modułu dllloader.pas. Jest on wraz z kodem, który dołączyłem do tego posta. Przeanalizuj sobie całość na spokojnie.

0

Znaczy statycznie nie da się? Ładuję statycznie, bo potem wszystkich funkcji i procedur używam. Dynamicznie by było nieopłacalne.

Nie da się statycznie bo winda jeszcze w czasie ładowania programu do pamięci ładuje też biblioteki, czyli ten błąd występuje jeszcze zanim program zostanie w jakikolwiek sposób załadowany.

0
Wejder napisał(a)

Ładuję statycznie, bo potem wszystkich funkcji i procedur używam.

Dynamiczne ładowanie bibliotek też do tego służy;

Możesz procedury ładować dynamicznie, ale przed tym sprawdzić czy plik biblioteki istnieje na dysku; Jeżeli nie istnieje - sam obsługujesz błąd, a jeżeli istnieje to użytkownik może dalej korzystać z programu;

0

ale przed tym sprawdzić czy plik biblioteki istnieje na dysku; Jeżeli nie istnieje - sam obsługujesz błąd

Nie jak nie istnieje, tylko jak LoadLibrary (czy jak to się nazywało) zwróci NIL. Bo to oznacza błąd, a plik może istnieć ale być uszkodzony...
Wiem, że różnica mała, ale trzymajmy się standardów.

0
Oho napisał(a)

Nie jak nie istnieje, tylko jak LoadLibrary (czy jak to się nazywało) zwróci NIL.

Wejder napisał(a)

Jeśli zmienie nazwę pliku dll to pojawi mi się błąd 'Nie można odnaleźc składnika. Uruchomienie tej aplikacji nie powiodło się, ponieważ nie znaleziono Plik.dll'. Czy jest jakaś możliwośc, żeby obsłużyć ten błąd i uruchomić jednak program?

Skoro @Wejder pisze, że chce obsłużyć błąd jeżeli nie znajdzie pliku biblioteki to podaje obejście tego problemu; Swoją drogą to i tak pasuje zrobić takie zabezpieczenie, więc nie rozumiem Twojej reakcji @oho;

Sprawdź najpierw, czy plik biblioteki istnieje, później czy funkcja LoadLibrary zwróciła wartość różną od nil a później czy procedury się poprawnie załadowały; Jeżeli wszystko pójdzie dobrze - program się uruchomi, jeżeli nie - masz do obsługi trzy różne błędy - złe rozwiązanie?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.