![wp1hdaccess | Embarcadero RAD Studio Delphi C++Builder Blogs wp1 hdaccess](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2021/01/wp1_hdaccess-2773044-1494711.jpg?resize=1140%2C628&ssl=1)
Wie verhalten sich Delphi, WPF .NET Framework und Electron im Vergleich zueinander und wie lässt sich ein objektiver Vergleich am besten durchführen? Embarcadero gab ein Whitepaper in Auftrag , um die Unterschiede zwischen Delphi, WPF .NET Framework und Electron beim Erstellen von Windows-Desktopanwendungen zu untersuchen. Die Benchmark-Anwendung – ein Windows 10 Calculator-Klon – wurde in jedem Framework von drei freiwilligen Mitarbeitern von Delphi Most Valuable Professionals (MVPs), einem freiberuflichen WPF-Experten und einem freiberuflichen Electron-Entwickler neu erstellt. In diesem Blog-Beitrag werden wir die Hardware Access-Metrik untersuchen, die Teil des im Whitepaper verwendeten Flexibilitätsvergleichs ist. Die Rechner-App selbst verwendet nicht den Hardware-Zugriff in jedem Framework, sodass der Vergleich zwischen den Frameworks selbst erfolgt.
![calc | Embarcadero RAD Studio Delphi C++Builder Blogs calc](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2021/01/calc-8541990.png?resize=509%2C462&ssl=1)
Table of Contents
Zugriff auf gerätespezifische Hardware
Erleichtert das Framework den Zugriff auf Daten von Gerätesensoren (GPS, Mikrofon, Beschleunigungsmesser, Kamera usw.) und physische Aktionen über ähnliche Geräte? Frameworks, die die Türen zu einer Vielzahl von Sensoren und Aktoren öffnen, die heute auf intelligenten Geräten verfügbar sind, schaffen Geschäftsmöglichkeiten und neuartige Lösungen für die Schmerzen der Verbraucher.
Die Standardbibliotheken von Delphi bieten einfachen Zugriff auf nahezu alle verfügbaren Datenbanktypen und ermöglichen Entwicklern den Zugriff auf Betriebssystemfunktionen auf jeder Plattform sowie die Interaktion mit E / A-Geräten und Hardwaresensoren. WPF kann über .NET-Bibliotheken auf Windows-Betriebssystemfunktionen und E / A-Geräte zugreifen, jedoch mit verwaltetem Code nach der Kompilierung anstelle von nativem Code. Electron bietet Hardwarezugriff über den Prozess node.js und kann über die Bibliotheken node.js auf einige, aber nicht alle Betriebssystemfunktionen zugreifen.
Nach Überprüfung aller drei Frameworks ist Delphi aufgrund seiner flexiblen und automatisierten Bereitstellung auf allen wichtigen Plattformen, der Skalierbarkeit auf allen Entwicklungsstufen und des visuellen Designsystems führend in der Kategorie Flexibilität. WPF mit .NET Framework ist auf der Windows-Plattform wettbewerbsfähig, kann jedoch auf MacOS- oder Mobilgeräten nicht mithalten. Schließlich hat Electron die geringsten Markteintrittsbarrieren und die meisten Optionen für Entwicklungstools, stützt sich jedoch stark auf manuelle Bereitstellungen, kann standardmäßig nicht direkt auf mobile Geräte abzielen, ist am wenigsten skalierbar und verfügt nicht über den gleichen Hardware- und Betriebssystemzugriff wie seine Konkurrenten.
![wp1hardwareaccess3822451 | Embarcadero RAD Studio Delphi C++Builder Blogs wp1 hardware access 3822451 2](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2021/02/wp1_hardware_access-3822451.png?resize=423%2C580&ssl=1)
Werfen wir einen Blick auf jedes Framework.
Delphi-Hardwarezugriff
Das FMX-Framework von Delphi enthält Bibliotheken, die die Interaktion mit den peripheren Sensoren und Komponenten eines Geräts unabhängig von der Plattform ermöglichen. Diese Bibliotheken werden zu nativem Code kompiliert. Die Delphi RTL, der direkte Speicherzugriff und andere Funktionen auf niedriger Ebene ermöglichen den vollständigen Zugriff auf die Hardwareplattform, einschließlich Inline-Assemblycode auf x86-Desktopplattformen.
Hier sind zwei Beispiele für die bedingte Kompilierung und Inline-Assemblierung (zwischen asm und end; Tags).
1 2 3 4 5 6 7 8 9 10 11 12 |
function Power10(val: Extended; power: Integer): Extended; {$IFDEF PUREPASCAL} begin // Pascal implementation here... end; {$ELSE !PUREPASCAL} {$IFDEF CPUX86} asm // ASM implementation here... end; {$ENDIF CPUX86} {$ENDIF !PUREPASCAL} |
1 2 3 4 5 6 7 8 9 10 |
{$IFDEF CPUX86} asm // ... end; {$ENDIF CPUX86} {$IFDEF CPUX64} asm // ... end; {$ENDIF CPUX64} |
Kernel-Modus-Treiber
In Delphi können Kernelmodustreiber für Windows erstellt werden. Kernel-Modus-Treiber werden von Microsoft definiert als „Kernel-Modus-Treiber werden im Kernel-Modus als Teil der Exekutive ausgeführt, die aus Kernel-Modus-Betriebssystemkomponenten besteht, die E / A, Plug-and-Play-Speicher, Prozesse und Threads, Sicherheit und Sicherheit verwalten demnächst. Kernel-Modus-Treiber sind normalerweise geschichtet. Im Allgemeinen empfangen übergeordnete Treiber normalerweise Daten von Anwendungen, filtern die Daten und übergeben sie an einen untergeordneten Treiber, der die Gerätefunktionalität unterstützt. “
https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/
Windows Management Instrumentation (WMI)
Delphi bietet einfachen Zugriff auf WMI und es gibt ein Open Source-Projekt, das schnell den Code generiert, den Sie benötigen. Laut Microsoft ist WMI definiert als „ist die Infrastruktur für Verwaltungsdaten und Vorgänge auf Windows-basierten Betriebssystemen.“
https://docs.microsoft.com/en-us/windows/win32/wmisdk/wmi-start-page
Die RTL bietet eine Komponente, TBluetooth , mit der Sie auf alle klassischen Bluetooth-Funktionen der RTL zugreifen können. Ziehen Sie eine TBluetooth
Komponente aus der Werkzeugpalette auf ein Formular oder Datenmodul Ihrer Anwendung.
Ein Sensor misst eine physikalische Größe und wandelt sie in ein Signal um, das von einer Anwendung gelesen werden kann. System.Sensors.Components bietet Ihren Anwendungen Komponenten, mit denen Sie Informationen von vielen verschiedenen Arten von Hardwaresensoren abrufen können.
TBiometricSensor |
TBiometricSensor is a wrapper for TCustomBiometricSensor. |
TElectricalSensor | TElectricalSensor is a wrapper for TCustomElectricalSensor. |
TEnvironmentalSensor | Wrapper for TCustomEnvironmentalSensor. |
TLightSensor | Wrapper for TCustomLightSensor. |
TLocationSensor | TLocationSensor is a wrapper for TCustomLocationSensor. |
TMechanicalSensor | Wrapper for TCustomMechanicalSensor. |
TMotionSensor | Wrapper for TCustomMotionSensor. |
TOrientationSensor | Wrapper for TCustomOrientationSensor. |
TScannerSensor | Wrapper for TCustomScannerSensor. |
Dieses Beispielprojekt zeigt, wie die Kamera eines Geräts verwendet und bearbeitet wird. Das Beispiel zeigt die Verwendung der TCameraComponent .
WPF .NET Framework-Hardwarezugriff
WPF .NET Framework kann auf zahlreiche Windows-Bibliotheken für Sensoren, E / A-Geräte und andere Peripheriegeräte für PCs zugreifen. Der Zugriff von WPF auf Hardware erfolgt über verwalteten Code und nicht über nativen Code. Es gibt jedoch eine native (nicht verwaltete) Schnittstelle über P / Invoke. Diese Brücke beschränkt den Zugriff.
Zugriff auf Elektronenhardware
Electron kann über die Bibliotheken von node.js auf Betriebssystemfunktionen und Hardware-Peripheriegeräte zugreifen. Die plattformübergreifende Chromium-Basis ermöglicht den Zugriff auf Hardware auf hoher Ebene auf allen wichtigen Desktop-Plattformen. Der Zugriff von Electron auf Hardware erfolgt über verwalteten Code und nicht über nativen Code. Er kann nur auf Funktionen zugreifen, die über Bibliotheken verfügbar gemacht werden.
Entdecken Sie alle Metriken im Whitepaper „Ermitteln des besten Entwickler-Frameworks durch Benchmarking“:
Laden Sie das Whitepaper „Delphi vs. WPF vs. Electron für Windows Desktops“ herunter
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition