Delphi XE4 - pár novinek

vložil Radek Červinka 23. dubna 2013 23:10

Firemonkey byla výrazně rozšířena. Trial verze je nově dostupná i jako Instant Trial, tj. via AppWave.

Pro zajímavost nově TOSVersion obsahuje nové platformy.

  TOSVersion = record
  public type
    TArchitecture = (arIntelX86, arIntelX64, arARM32);
    TPlatform = (pfWindows, pfMacOS, pfiOS, pfAndroid, pfWinRT, pfLinux);
  public const
    AllArchitectures = [arIntelX86, arIntelX64, arARM32];
    AllPlatforms = [pfWindows, pfMacOS, pfiOS, pfAndroid, pfWinRT, pfLinux];

Hmm, pfWinRT?

Několik nových překladových konstant

AUTOREFCOUNT - ARC je dostupné (dcciosarm, dccios32)
CPUARM - CPU je ARM (dcciosarm)
EXTERNAL_LINKER - externí linker (dcciosarm, dccios32)
IOS - target platform je iOS (dcciosarm, dccios32)
NEXTGEN - Next Generation Delphi compiler (dcciosarm, dccios32)
UNDERSCOREIMPORTNAME - podtržítko při importu knihoven (dccosx, dccios32, v helpu je i u dcc32, ale pochybuji)
WEAKREF - kompilátor s weak references (ARC) - (dcciosarm, dccios32)
WEAKINSTREF - weak reference pro instance - (dcciosarm, dccios32)
WEAKINTFREF - weak reference pro interfaces - (dcciosarm, dccios32)

Kompletní přehled Conditional definic.

Nové atributy

 [volatile] indikátor, že položka může být  měněna jiným vláknem 
 [weak] weak reference (nezvyšuje počet referencí pro ARC)
 [Ref] to ensure constant parameters are passed by reference rather than by value.

(posledním si nejsem jistý)

NEXTGEN a pointer

Obecný Pointer je doporučován nepoužívat (pro NextGen - kvůli ARC). Navíc jelikož pro NextGen je jen Unicode řetezec, je nutno využít TPtrWrapper a TMarshal.

Tohle je můj kousek ze Synapse pro NextGen (aspoň ta druhá polovina).

function GetSinIP(Sin: TVarSin): string;
var
  p: PAnsiChar;
  hostlen, servlen: integer;
  r: integer;
  sa:sockaddr absolute Sin;
  byHost, byServ: TBytes;
  HostWrapper, ServWrapper: TPtrWrapper;
begin
  Result := '';
  if not IsNewApi(Sin.AddressFamily) then
  begin
    p := inet_ntoa(Sin.sin_addr);
    if p <> nil then
      Result := string(p);
  end
  else
  begin
    // NEXTGEN compatible
    hostlen := NI_MAXHOST;
    servlen := NI_MAXSERV;
    Setlength(byHost, hostLen);
    Setlength(byServ, hostLen);
    HostWrapper := TPtrWrapper.Create(@byHost[0]);
    ServWrapper := TPtrWrapper.Create(@byServ[0]);
    r := getnameinfo(sa, SizeOfVarSin(sin), HostWrapper.ToPointer, hostlen,
      ServWrapper.ToPointer, servlen, NI_NUMERICHOST + NI_NUMERICSERV);
    if r = 0 then
      Result := TMarshal.ReadStringAsAnsi(HostWrapper{, NI_MAXHOST});
  end;
end;

Tagy: ,

FireMonkey

Komentáře

24.4.2013 1:32:12 #

Zdeněk Dráždil

Zkoušeli jste už někdo propojit XE4 se simulátorem v MAC? Já jsem si stáhl Trial, vše nastavil podle tutoriálů, spojení funguje, testy prochází, ale když dám kompilaci testovacího projektu pro iOS, tak mi to hlásí:
Unable to launch process on "IP MACu..." using the parameters from "MAC" profile: The following error was returned: No such file or directories.

Zdeněk Dráždil

24.4.2013 1:34:03 #

Zdeněk Dráždil

Zkoušel jsem projít nastavení a prohlídnout i tutoriálová videa, ale nenapadá mě kde bych měl špatně cestu nebo co dalšího...

Zdeněk Dráždil

24.4.2013 10:37:26 #

radekc

A máš tam PA server nainstalovaný (jako na Macu)?

radekc

24.4.2013 10:57:14 #

radekc

A máš tam v instalované XCode se simulátorem?

radekc

24.4.2013 18:39:44 #

Zdeněk Dráždil

Obojí nainstalované mám.
A už jsem na to taky přišel. Byl problém v uživatelském jménu do Windows. Používal jsem své jméno s diakritikou a to právě způsobovalo PA Serveru na MACu problém. Stačilo založit nového uživatele bez diakritiky a už to jede.
Zatím to testuji chvilku a na jednoduchých věcech, ale moc se mi to líbí! Překlad je velmi rychlý, zmáčknu F9 a do dvou vteřin se aplikace spustí na MACu v simulátoru. A to jedu celý MAC virtuálně na jednom PC s Windows... Na první pohled musím vývojářům gratulovat, je to přesně to na co jsem dlouhou dobu čekal. Už se těším jak vyjede verze pro Android.

Zdeněk Dráždil

24.4.2013 18:51:07 #

Zdeněk Dráždil

... to je pecka, pomocí jedné komponenty zobrazit v jakékoli části aplikace okno s on-line prohlížečem, fakt se mi to začíná líbit ;-)

Zdeněk Dráždil

26.4.2013 8:28:59 #

radomir23

Dobry den, chcel som sa opytat ak programujem v BC++ a teraz je novy kompilator pre bc++ budem môcť používat synapse v bc++ ?

dakujem

radomir23

2.5.2013 18:12:58 #

czbird

Chapu to dobre, ze bez Macu jsem s iOS developmentem nahrany a primy deploy PC->iPhone neni mozny?

czbird

2.5.2013 21:43:47 #

radekc

Mužeš teoreticky použít VMWare. OS X je nutný, protože je nutný jednak simulátor (existuje jen pro OSX) druhak signovat binárky pro iOS - zatím to jde IMHO jen přes OSX. Ale v podstatě OS X jen běží a ničeho se nemusíš dotknout.

radekc

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců