OSX, Delphi a string

vložil Radek Červinka 16. července 2012 22:26

Jelikož API OSX předpokládá použití své varianty řetězců a dalších komplexních datových struktur, přináší RTL Delphi jednoduché nástroje na konverzi z nativních Delphi na nativní OSX typy a zpět.

Jádrem je jednotka System.Mac.CFUtils, zdrojáky jsou "source\rtl\osx\System.Mac.CFUtils.pas". Jednotka obsahuje záznamy - ve smyslu typu record - pro CFArray, CFBoolean, CFDate, CFData, CFDictionary, CFNumber a samozřejmě pro CFString.

Např. pro CFString je definován následující záznam

  TCFString = record
    Value: CFStringRef;

  private
    function DoAsChar(Release: Boolean = False): Char;
    function DoAsString(Release: Boolean): string;
  public
    // Conversion from Delphi string to CoreFoundation CFString
    constructor Create(const AValue: string);
    // Conversion from CoreFoundation string to Delphi types
    function AsChar(Release: Boolean = False): Char;
    function AsString(Release: Boolean = False): string;
    function TryAsChar(out AResult: Char; Release: Boolean = False): Boolean;
    function TryAsString(out AResult: string; Release: Boolean = False): Boolean;

    // NOTE: Explicit operator follows Create Rule.
    class operator Explicit(const AValue: string): TCFString;
    class operator Implicit(AValue: TCFString): string;

    class operator Implicit(AValue: CFStringRef): TCFString;
  end;

použití by mělo být

var
  cs:TCFString;

  cs :=TCFString.Create(delphi_string);
  cs.Value je nyní hodnota pro OSX
  resp. cs.AsString naopak

Byl bych rád, kdyby někdo zkušenější to zkusil doplnit, pro mne samotného je OSX takové minové pole a našlapuji pomaličku. Např. jen tuším, kdy parametr Release u AsString může být True a kdy False. Viz.

// NOTE: Using these helpers requires familiarity with Core Foundation's
// memory management routines. These helpers aim to reduce the necessity of
// CFRetain and CFRelease calls by the user, it may still be necessary to call
// them directly.

Tagy:

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ů