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.
a78c3ffb-98b6-4dbe-8e2a-46fb796b39d4|3|5.0
Tagy: OSX