Unterschiede zwischen Windows und macOS
Nach oben zu Gesichtspunkte für geräteübergreifende Anwendungen
Bei der geräteübergreifenden Entwicklung für macOS 64 Bit (Intel) oder macOS 64 Bit (ARM) 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 macOS
- 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 den Plattformen macOS 64 Bit (Intel) und macOS 64 Bit (ARM) ist eine strukturierte Exception-Behandlung (__try/__except) nicht verfügbar. Weitere Informationen finden Sie unter MacOS-Anwendungsentwicklung#Exception-Behandlung.
Allgemeine Informationen zur Exception-Behandlung finden Sie unter:
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.
WideChar
undwchar_t
(wchar_t
ist unter Windows 2 Byte und unter macOS 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 macOS
Unter macOS 64 Bit (Intel) und macOS 64 Bit (ARM) werden globale Variablen mithilfe von PIC (Position-Independent Code, positionsunabhängiger 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, macOS 64 Bit (Intel) und macOS 64 Bit (ARM) 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 macOS unterschiedlich:
- Unter Windows gibt GetGlobalVar den WERT von GlobalVar zurück (wie erwartet).
- Unter OSX 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 Anwendung für macOS 64 Bit (Intel) und macOS 64 Bit (ARM) kann entweder FireMonkey-APIs oder POSIX-APIs aufrufen.
- Eine Anwendung für macOS 64 Bit (Intel) und macOS 64 Bit (ARM) kann keine Windows-APIs (weder 32 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 |
> 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
- macOS-Befehlszeile 101
- Geräteübergreifende Anwendungen entwickeln