2013-04-02 16 views
20

siedziałem dookoła debugowania kodu i natknąłem się tej linii w SysUtils.pas:„lokalną” dyrektywa w Delphi

procedure ConvertError(ResString: PResStringRec); local; 

Co lokalna kluczowe zrobić dokładnie? Wygląda na to, że funkcja ConvertError nie jest zadeklarowana w sekcji interfejsu pliku, czy jest to tylko wyjaśnienie, że funkcja jest rzeczywiście lokalna, czy też istnieje praktyczna korzyść z zastosowania tej dyrektywy poza tym?

+3

Wygląda na to, że dyrektywa zapewnia brak deklaracji w interfejsie (w przeciwnym razie powoduje błąd czasu kompilacji). Interesujące ... –

+0

Czy próbowałeś przeczytać dokumentację dla tego słowa kluczowego? – wRAR

+2

@wRAR Uderzyłem w f1, ale wbudowana dokumentacja nie mogła go znaleźć. Potem sprawdziłem Google i nie wymyśliłem niczego, a oto jesteśmy;) – kling

Odpowiedz

16

To sięga kompilatora systemu Linux, Kylix. Oto, co widzę w moim Delphi 6 przewodnika językowego, strona 9-4:

dyrektywy lokalny, który wyznacza procedury jako niedostępny do eksportu, platforma jest specyficzny i nie ma wpływu w programowaniu Windows.

W systemie Linux dyrektywa lokalna zapewnia niewielką optymalizację wydajności dla procedur, które są kompilowane w bibliotekę, ale nie są eksportowane. Dyrektywę można określić dla niezależnych procedur i funkcji, ale nie dla metod. Procedura zadeklarowana jako lokalna - na przykład.

function Contraband(I: Integer): Integer; local; 

-does nie odświeżyć rejestr EBX i stąd

  • nie mogą być eksportowane z biblioteki.
  • nie może być zadeklarowany w sekcji interfejsu jednostki.
  • nie może przyjmować adresu lub przypisywać go do zmiennej typu proceduralnego.
  • jeśli jest to czysta procedura asemblera, nie można jej wywołać z innej jednostki, chyba że wywołujący wywołujący skonfiguruje EBX.
+0

Doskonale, dokładnie tego, czego szukałem! Dzięki! – kling

+2

Oto [link] (http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/devcommon/dynamicallyloadedlibs_xml.html) do dokumentacji embarcadero dotyczącej lokalnej dyrektywy. – RRUZ

+0

@RRUZ Znalazłem to również, wpisując tekst w mojej odpowiedzi! Delphi 2007 jednak. Stara szkoła. –