Delphi – Problemi sa različitim verzijama kompajlera

Ukoliko ikada budete pisali Pascal (objektni Pascal) programski kod, a koji bi trebao da radi na nekoliko verzija Delphi kompajlera (prevodioca), moraćete da znate pod kojom verzijom radi dati kompajler (onaj na kome se vrši prevođenje). Recimo da kreirate sopstvenu Delphi komponentu (o ovome smo već pisali) za komercijalnu upotrebu, a korisnici – programeri kojima budete isporučivali komponentu, poseduju različite verzije Delphi-ja. Kada budu pokušali da kompajliraju izvorni kod komponente (koji ste im isporučili) – mogli bi da se susretnu sa problemom! Šta će se desiti ako ste komponentu kreirali uz pomoć Delphi-ja verzije 5, a korisnik poseduje verziju 3.

Kada radite za tržište, a i inače, trebalo bi da se potrudite i obezbedite mehanizme koji će prevazići barijeru različitih verzija kompajlera. Zahvaljujući specijalnom komentarima – instrukcijama Delphi kompajlera, ovo je moguće postići. Jedna od instrukcija je i naredba uslovnog prevođenja „$IfDef„, čija je sintaksa sledeća:


{$IfDef Naziv}

{$Else}

{$EndIf}

Varijabla „Naziv“ predstavlja tzv. „uslovni simbol“, a sam Delphi definiše nekoliko ovih simbola. Simbol za „prepoznavanje“ Delphi-ja verzije 5 je „VER130„, a ostale simbole možete videti na slici. Znajući ove simbole, moćićemo da napišemo programski kod koji će raditi sa nekoliko verzija Delphi kompajlera.

Evo i jednog primera primene uslovnog simbola. Sa verzijom 5 došla nam je i nova funkcija „IncludeTrailingBackslash„, koja dodaje simbol „“(backslash) na kraj stringa, ukoliko već ne postoji. Ako ova funkcija treba da se koristi u vašem projektu, za verziju 5 samo ćemo pozvati ovu funkciju, a za ostale verzije dodaćemo programski kod koji će nadomestiti nedostatak ove funkcije. Evo i koda:


function DodajCrtu(str: string) : string;
begin
{$IFDEF VER130}
Rezultat:=IncludeTrailingBackslash(str);
{$ELSE}
if Copy(str, Length(str), 1) = “ then
Rezultat := str
else
Rezultat := str + “;
{$ENDIF}
end;

Kao što vidite, kada se pozove funkcija „DodajCrtu„, vrši se provera verzije prevodioca uz pomoć uslovnog simbola, a zatim se u zavisnosti od verzije izvršava kod iza „$IFDEF“, ili iza „ELSE“. Zapamtite samo da se sve kompajlerske instrukcije stavljaju u vitičaste zagrade, kao i komentari.

Pratite Krstaricu na www.krstarica.com