vložil Radek Červinka
22. května 2012 00:18
Už dříve jsem napsal článek o DLL a volacích konvencích a dnes to doplním o použití pro OS X. Většinu věcí použijete z minula, jen je tu takový drobný zádrhel.
Mějme v nějaké knihovně funkci např. InicializeSDK. Její deklaraci pro Windows určitě zvládnete, proto zároveň uvedu variantu pro OS X.
Základním kamenem úrazu je, že jména v knihovně začínají podtržítkem a druhým problémem je jiná volací konvence (viz uvedený článek) a třetím problémem je, že musíte najít knihovnu. V tom druhém Vám pomůže samotný OS X, resp.
pokud program spustíte pod PA serverem (součást instalace Delphi - už jsem o tom zde psal: Deploy to OSX a pokračování) je v případě problému s knihovnou vypsána cesta kde je knihovna hledána.
Takže abych SDK udělal jednoduše multiplatformní napsal jsem něco takového (inspirace v RTL a troška zkoušení):
const
{$IFNDEF MACOS}
xsdk = 'XSDK.DLL';
_PU = '';
{$ELSE}
_PU = '_';
xsdk = '/Applications/Contents/XSDK';
{$ENDIF}
function InitializeSDK( ) : Integer ; {$IFDEF MACOS}cdecl;{$ELSE}stdcall;{$ENDIF}
external xsdk name _PU + 'InitializeSDK';
Tedy v jednom kódu jsem podchytil změnu s podtržítkem (PU), volací konvenci a informaci o knihovně. Berte to jako takový výkop, určitě to napíšete pěkněji. Jen pro úplnost: toto budete potřebovat jen ve speciálních případech. Většina volání knihoven je součástí RTL v MacAPI.*, např. MacApi.CoreFoundation.
99f0a355-94d7-40db-a75c-05420a8019db|1|5.0
Tagy: OSX, DLL
Návody