Unterschiede zwischen Windows und Mac OS X
Nach oben zu Gesichtspunkte für geräteübergreifende Anwendungen
Bei der geräteübergreifenden Entwicklung für Mac OS X gibt es viele Fragen und Bereiche, die Sie verstehen müssen, um angemessen damit umgehen zu können, u.a. die in diesem Thema behandelten Fragen.
Inhaltsverzeichnis
- 1 Abweichende Exception-Behandlung
- 2 Abweichende Ausrichtung auf dem Mac und unter Windows
- 3 Zugreifen auf globale Variablen in ASM auf Windows und OS X
- 4 Windows-Bibliotheken sind nur für Windows-Anwendungen verfügbar
- 5 Entsprechungen für Dateierweiterungen auf dem Mac und unter Windows
- 6 Entsprechungen für Befehlszeilenelemente auf dem Mac und unter Windows
- 7 Siehe auch
Abweichende Exception-Behandlung
Mac- und Linux-Systeme verwenden Programmzählern (Program Counter, PC) zugeordnete Exceptions. Windows (Win32) verwendet auf dem Stack gelinkte Registrierungs-Records.
Sie müssen Ihre Exception-Behandlung an die der jeweiligen Zielplattform anpassen. Insbesondere gibt es Unterschiede in der Art und Weise, wie Assembly-Routinen programmiert werden müssen, wenn eine Exception nach diesen Routinen ausgelöst werden könnte. Weitere Informationen finden Sie unter PC-zugeordnete Erweiterungen#Abwicklung von Assembly-Routinen.
Auf der Mac OS X-Plattform steht die strukturierte Exception-Behandlung (__try/__except) nicht zur Verfügung. Weitere Informationen finden Sie unter Mac OS X-Anwendungsentwicklung#Exception-Behandlung.
Allgemeine Informationen zur Exception-Behandlung finden Sie unter:
- Exception-Behandlung (Delphi)
- Exception-Behandlung in C++Builder
- Elis Blog über Mac OS-Exception-Behandlung: http://blogs.embarcadero.com/eboling/2009/11/10/5628
Abweichende Ausrichtung auf dem Mac und unter Windows
- Ausrichtungsprobleme betreffen nur die Entwicklung mit Assembler-Code.
- Die Binärdatei einer Mac-Anwendung verwendet 16-Byte-Intervalle.
- Der SO-Stack (Shared Object) muss 16 Byte große Einheiten enthalten.
- In der Mac-Umgebung wird jeder Prozess abgebrochen, der nicht der 16-Byte-Ausrichtung entspricht.
- Siehe Elis Blog über den Stack auf dem Mac: http://blogs.embarcadero.com/eboling/2009/10/13/5620
WideChar
undwchar_t
(wchar_t
ist unter Windows 2 Byte und unter OS X 4 Byte groß)tchar.h
funktioniert auf einem Mac nicht
Zwei Delphi-Compiler-Direktiven steuern die Ausrichtung:
- Code ausrichten (Delphi) {$CODEALIGN}
- Felder ausrichten (Delphi) {$A}
Zugreifen auf globale Variablen in ASM auf Windows und OS X
Unter OS X werden globale Variablen mithilfe von PIC (Position-Independent Code, positionsunabhängigem Code) adressiert, und dies wirkt sich auf die Möglichkeit aus, auf globale Variablen in ASM zuzugreifen.
Wenn Sie eine globale Variable folgendermaßen deklariert haben:
var GlobalVar: UInt32 = $12345678;
Dann erwarten Sie, dass der WERT dieser Variable im ASM-Code wie folgt ermittelt wird:
function GetGlobalVar: UInt32; asm mov eax,[GlobalVar] end;
Dieser Code arbeitet unter Windows und OS X jedoch nur korrekt (wie erwartet), wenn die globale Variable in DERSELBEN Unit wie die ASM-Routine deklariert ist. Wenn sich GlobalVar in einer anderen Unit befindet, verhält sich GetGlobalVar unter Windows und OS X unterschiedlich:
- Unter Windows gibt GetGlobalVar den WERT von GlobalVar zurück (wie erwartet).
- Unter OS X gibt GetGlobalVar die ADRESSE von GlobalVar zurück (dies kann problematische Konsequenzen haben).
Um auf eine globale Variable zuzugreifen, wird folgendes Vorgehen empfohlen:
function GetGlobalVar: UInt32; begin asm MOV EAX, [EBX].OFFSET GlobalVar MOV EAX, [EAX] end; end;
Die "begin"-Klausel am Anfang wird zum Festlegen des erforderlichen PIC-Prologcodes benötigt, der das EBX für diese Operation einrichtet.
Windows-Bibliotheken sind nur für Windows-Anwendungen verfügbar
Beachten Sie diese Unterschiede:
- Eine Mac OS X-Anwendung kann entweder FireMonkey-APIs oder POSIX-APIs aufrufen.
- Ein Mac OS X-Anwendung kann keine Windows-APIs (weder 32 Bit noch 64 Bit) aufrufen.
- Eine Windows-Anwendung kann entweder 32-Bit-Windows- oder 64-Bit-Windows-APIs aufrufen (nach entsprechender Konfiguration).
Entsprechungen für Dateierweiterungen auf dem Mac und unter Windows
Mac-Dateierweiterung | Windows-Dateierweiterung |
---|---|
.o (Objektdatei) |
.obj (Objektdatei) |
.dylib (dynamische Bibliothek) |
.dll (dynamisch gelinkte Bibliothek) |
Entsprechungen für Befehlszeilenelemente auf dem Mac und unter Windows
Element | Auf dem Mac | Unter Windows |
---|---|---|
Befehlszeilenoberfläche |
Apple-Terminalfenster (UNIX-basiert) |
Befehlsfenster (Start | cmd (Eingabeaufforderung)) |
Eingabeaufforderung |
> Beginnen Sie den Befehl mit |
> |
Befehl zum Auflisten von Verzeichnissen |
ls |
dir |
Befehl zum Wechseln des Verzeichnisses |
|
|
Trennzeichen für Dateinamen |
/ |
\ |
Siehe auch
- Exception-Behandlung (Delphi)
- Exception-Behandlung in C++Builder
- Windows-Botschaftsbehandlung (in Komponentenentwicklung)
- Gesichtspunkte für geräteübergreifende Delphi-Anwendungen
- Gesichtspunkte für geräteübergreifende C++-Anwendungen
- Mac OS X Command Line 101
- Geräteübergreifende Anwendungen entwickeln