[ Pobierz całość w formacie PDF ]
.WyÅ›wietlenie komunikatu assertion error jest niepokojÄ…cym symptomem dla użytkownika, niemniej jednak o wielelepiej b¹dzie, jeżeli program zakoÅ„czy si¹ dziwnym komunikatem, niż gdyby miaÅ‚ dziaÅ‚aćdalej i na przykÅ‚ad uszkodzić cenne dane użytkownika.Niniejszy podrozdziaÅ‚ zawiera kilka przykÅ‚adów użycia procedury Assert, wyst¹pujÄ…cych w opisieinnych elementów j¹zyka  patrz procedura Move, funkcja TypeInfo, funkcje VarArray-Lock i VarIsArray.AssertErrorProc, $ASSERTIONS, $Cvar AssertErrorProc: TAssertErrorProc;procedure AssertErrorHandler(const Message, Filename: string;LineNumber: Integer; ErrorAddr: Pointer)AssertErrorProc:= @AssertErrorHandler;Kiedy zaÅ‚ożenie programu nie zostanie speÅ‚nione, Delphi wywoÅ‚uje procedur¹ o adresie przecho-wywanym w zmiennej AssertErrorProc.Kompilator przekazuje tej procedurze komunikatoraz lokalizacj¹ wyrażenia Assert." Programista może zaimplementować w tej procedurze dowolne funkcje programu, takie jaklogowanie bÅ‚¹du, wysyÅ‚anie poczty do osoby odpowiedzialnej za sprawne dziaÅ‚anie aplikacjiitp.W przeciwieÅ„stwie do innych procedur obsÅ‚ugi bÅ‚¹du, AssertErrorProc pozwala nakontynuowanie programu od wyrażenia nast¹pujÄ…cego za wywoÅ‚aniem procedury Assert." Jeżeli AssertErrorProc wskazuje nil, Delphi generuje bÅ‚Ä…d czasu wykonania 21(EAssertError)." ModuÅ‚ SysUtils przypisuje zmiennej AssertErrorProc adres procedury generujÄ…cejwyjÄ…tek EAssertError.AbstractErrorProc, Assert, ErrorProc, ExceptProc procedure Assign(var F: File; const FileName: string);procedure Assign(var F: TextFile; const FileName: string);Procedura Assign wykonuje takie samo zadanie, jak AssignFile.W nowym kodzie zalecanejest stosowanie procedury AssignFile  Assign jest nazwÄ… metody cz¹sto stosowanÄ… w Delphi,w zwiÄ…zku z czym Å‚atwo może dojść do nieporozumienia w kodzie.Assign nie jest rzeczywistÄ…procedurÄ….AssignFilefunction Assigned(const P: Pointer): Boolean;function Assigned(Pbj: TObject): Boolean;function Assigned(Method: TMethod): Boolean;Funkcja Assigned zwraca prawd¹, jeżeli argument jest różny od nil, lub faÅ‚sz, jeżeli argumentjest pusty (równy nil).Assigned nie jest rzeczywistÄ… funkcjÄ…." Argument może być wskaznikiem, referencjÄ… obiektu lub metodÄ…." Stosowanie funkcji Assigned zamiast bezpoÅ›redniego porównania wskaznika z nil,skutkuje spadkiem wydajnoÅ›ci programu." Jeżeli wskaznik jest wskaznikiem funkcji, użycie Assigned daje jasno do zrozumieniakompilatorowi, że intencjÄ… programisty nie jest wywoÅ‚anie funkcji i porównanie jej wynikuz nil.Dlatego Assigned jest cz¹sto stosowana do testowania wskazników funkcji i metod." Wskaznik metody skÅ‚ada si¹ z dwóch cz¹Å›ci: wskaznika kodu i wskaznika danych.Assignedsprawdza jedynie bardziej znaczÄ…ce sÅ‚owo referencji kodu: jeżeli sÅ‚owo to zawiera zero,referencja metody jest równa nil.Wskaznik kodu jest ignorowany przez Assigned.procedure TForm1.Button1Click(Sender: TObject);var P: Pointer; beginP := nil;if Assigned(P) thenEdit1.Text:='wskaznik nie dotyczy funkcji';GetMem(P, 1024);FreeMem(P, 1024);if Assigned(P) thenEdit1.Text:=' testowana funkcja GetMem()';end;Nilprocedure AssignFile(var F: File; const FileName: string);procedure AssignFile(var F: TextFile; const FileName: string);AssignFile przypisuje nazw¹ pliku do pliku o okreÅ›lonym lub nieokreÅ›lonym typie lub do plikutekstowego (przed otwarciem).AssignFile nie jest rzeczywistÄ… procedurÄ…." Jeżeli przed wywoÅ‚aniem jednej z procedur Append, Reset lub Rewrite nie zostaniewywoÅ‚ana procedura AssignFile, zgÅ‚oszony zostanie bÅ‚Ä…d wejÅ›cia-wyjÅ›cia o numerze 102." Delphi interpretuje pusty Å‚aÅ„cuch jako konsol¹.W aplikacji typu konsolowego do konsoliprzypisywane sÄ… automatycznie pliki Input i Output.Próba użycia pliku konsolowegow aplikacji z interfejsem graficznym skutkuje bÅ‚¹dem wejÅ›cia-wyjÅ›cia o numerze 105.varLogFile: string = 'c:\log.txt';// Dodanie komunikatu do pliku dziennika.PrzykÅ‚ad w opisie sÅ‚owa// kluczowego Keyword demonstruje innÄ… przeciążonÄ… procedurÄ™ Log.procedure Log(const Msg: string); overload;varF: TextFile;beginAssignFile(F, LogFile);// Próba otwarcia pliku, która powiedzie siÄ™ tylko w przypadku, gdy// plik istnieje.{$IOCHECKS Off}Append(F);{$IOCHECKS On}if IOResult 0 then// Plik nie istnieje, należy go zatem utworzyć.Rewrite(F);WriteLn(F, Msg);CloseFile(F);end; [ Pobierz caÅ‚ość w formacie PDF ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • agnieszka90.opx.pl