Delphi FAQ

W Delphi 8 kompilator wskazuje błąd unsafe type

Adam Boduch

Platforma .NET jest uznawana za środowisko "bezpiecznego projektowania aplikacji", więc niektóre elementy języka Delphi są uznane za niebezpieczne i - kompilator nie pozwoli na ich kompilacje. W Delphi 7 kompilator już został przystosowany do .NET i umożliwiał wyświetlanie komunikatów ostrzegawczych. W Delphi 8 to się zmieniło - teraz nie ma komunikatów ostrzegawczych tylko błędy (Errors).

Unsafe type

  • PChar, PAnsiChar, PWideChar
  • Wskaźniki
  • Nieokreślone parametry var i out w procedurach i funkcjach
  • Konstrukcja file of
  • Typ Real48
  • Rekordy wariantowe

Unsafe code

  • Dyrektywa absolute
  • Procedury Addr, Ptr, Hi, Lo, Swap
  • Funkcje BlockRead i BlockWrite
  • GetMem, FreeMem, AllocMem
  • wstawki assemblera
  • Operator @

Istnieje możliwość skompilowania "niebezpiecznego" kodu opatrując procedurę klauzulą unsafe:

{$UNSAFECODE ON}
procedure Main; unsafe;
var
  I : Integer;
  P : ^Integer;
begin
  I := 10;
  P := @I;
  P^ := 11;
end;
{$UNSAFECODE OFF}

Dodatkowo należy poustawiać dyrektywy określające niebezpieczny kod, ale w takim wypadku kompilator wyświetli jedynie ostrzeżenia.

FAQ

14 komentarzy

Ja bardzo przepraszam, ale użycie jakiegoś wyrażenia z powyższych spowoduje nieskompilowanie kodu? Pewnie zaraz if zostanie uznany za niebezpieczny i trzeba będzie uczyć się programować na nowo - bez niego.

Porażka...

he, delphi8 mi wyglądał na shit jak patrzyłem na interfejs... teraz jestem pewien że to totalny shit!!!

I jak sam wspomniałeś już D7 można było sobie poustawiać takie .net-owe łorningi. D8 sux.

Ale ten sam numer był w Javie - zrezygnowanie ze wskaźników ze względów bezpieczeństwa, ale... do kodu można dołączać skompilowany kawałek programu (wtedy kod nie jest już przenośny) - a może on być w dowolnym języku - więc jednak mamy wskaźniki :>

Pewnie i tu jest jakaś furtka...

no to ja proponuje przygotowac wiele plytek z d5 d6 no i moze d7 za ktorym nie przepadam... nie wiem dlaczego tak jest ale co nowsza rzecz tym bardziej zwalona... moze tylko ja jestem takiego zdania ale co fakt to fakt... cos czuje ze D8 nie zrobi wielkiej kariery...

Flabra: juz od D7 byla nazwa Delphi language.

Dobrze, że chłopiaki od borlanda zmienili 'object pascal' na 'delphi language'. Bo to juz nie jest w żaden sposób pascal. To VB ze składnią pascala.

No to sa w sumie wymagania .NET. Nie ma tu typu PChar - wszystkie funkcje zamiast PChar posiadaja String. No tak - tez troszeczke zaluje - nie ma wskaznikow :( Jest za to nowy typ IntPtr.

spoczatku if a potem i begin uznaja za nie potrzebnego :)

Wygląda na to, że panownie z Borlanda zaczynają cierpieć na tę samą chorobę, co panowie z M$... ehhh...

A ja siedzę cały czas na D5 i mam gdzieś całą .NET oraz wszystko powyzej D6.

Czyli wszystko co ma wspólnego z pamięcią lub ma nieokreślone typy. Niezłe przegięcie. Zgrywam D6 na płytkę i trzymam jak skarb. Na wszelki wypadek BCB też zachowam.

:/ no to fajnie, nie da sie jakos tego ominac?? no nawet Funkcje BlockRead i BlockWrite ja sie chyba zalamie i co mam z tym zrobic?? albo nawet z PChar??

boże co za idiotyzm , żeby w przyszłości nie doszło do tego w builderze , bo sie załamie .