Programowanie w języku Delphi » FAQ

W Delphi 8 kompilator wskazuje błąd unsafe type

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.

14 komentarzy

prabab 2003-12-27 17:45

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

flabra 2003-12-10 00:23

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

Marooned 2003-12-07 23:14

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...

korn 2003-12-09 14:11

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...

Adam Boduch 2003-12-09 12:44

Flabra: juz od D7 byla nazwa Delphi language.

flabra 2003-12-08 09:15

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.

Adam Boduch 2003-12-07 11:25

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.

DeKoVV 2003-12-07 11:17

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

Krzemin 2003-12-06 18:02

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

berl 2003-12-06 22:31

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

Dryobates 2003-12-06 17:41

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.

nediam 2003-12-06 17:02

:/ 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??

Marooned 2003-12-06 15:51

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...

RobinMaster 2003-12-06 16:24

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