API-Satz-Ladevorgang

API-Gruppen basieren auf Betriebssystemunterstützung im Bibliothekslademodul, um effektiv eine Modulnamespaceumleitung in den Bibliotheksbindungsprozess einzuführen. Der NAME des API-Setvertrags wird vom Bibliotheklademodul verwendet, um eine Laufzeitumleitung des Verweises auf eine Zielhostbin binär durchzuführen, die die entsprechende Implementierung des API-Sets enthält.

Wenn das Lader zur Laufzeit auf eine Abhängigkeit von einem API-Satz trifft, verwendet das Lader Konfigurationsdaten im Bild, um die Hostbin binär für einen API-Satz zu identifizieren. Diese Konfigurationsdaten werden als API-Satzschema bezeichnet. Das Schema wird als Eigenschaft des Betriebssystems zusammengestellt, und die Zuordnung zwischen API-Sätzen und Binärdateien kann sich je nachdem unterscheiden, welche Binärdateien in einem bestimmten Gerät enthalten sind. Mit dem Schema kann eine importierte Funktion in einer einzelnen Binärdatei ordnungsgemäß auf verschiedenen Geräten geroutet werden, auch wenn die Modulnamen des binären Hosts auf verschiedenen Windows-Geräten umbenannt oder vollständig umgestaltet wurden.

Windows 10 unterstützt zwei Standardverfahren für die Anwendung und Schnittstelle mit API-Sätzen: direkte Weiterleitung und Umgekehrte Weiterleitung.

Direkte Weiterleitung

In dieser Konfiguration importiert der nutzende Code direkt den Namen eines API-Satzmoduls. Dieser Import wird in einem einzelnen Vorgang aufgelöst und ist die effizienteste Methode mit dem geringsten Aufwand. Konzeptionell kann diese Auflösung auf verschiedene Binärdateien auf unterschiedlichen Windows 10 verweisen, wie im folgenden Beispiel gezeigt:

Importierter API-Satz: api-feature1-l1-1-0.dll

  • Windows PC -> feature1.dll
  • HoloLens -> feature1_holo.dll
  • IoT -> feature1_iot.dll

Da die Zuordnungen in einem benutzerdefinierten Schemadatenrepository gespeichert werden, bedeutet dies, dass ein API-Satzname, der mit .dll endet, nicht direkt auf eine Datei auf dem Datenträger verweisen. Der .dll Teil des API-Satznamens ist nur eine Konvention, die vom Lader benötigt wird. Der API-Satzname ist eher wie ein Alias oder ein virtueller Name für eine physische DLL-Datei. Dadurch wird der Name für den gesamten Bereich der geräteübergreifenden Windows 10 portierbar.

Umgekehrte Weiterleitung

Obwohl API-Satznamen einen stabilen Namespace für Module geräteübergreifend bereitstellen, ist es nicht immer praktisch, jede Binärdatei in dieses neue System zu konvertieren. Beispielsweise wird eine Anwendung möglicherweise schon seit vielen Jahren häufig verwendet, und das erneute Kompilieren der Binärdateien der Anwendung ist möglicherweise nicht möglich. Darüber hinaus müssen einige Anwendungen möglicherweise weiterhin auf Systemen ausgeführt werden, die vor der Einführung bestimmter API-Sätze erstellt wurden.

Um diesem Kompatibilitätsgrad gerecht zu werden, wird ein System von Forwardern auf allen Windows 10-Geräten bereitgestellt, die eine Teilmenge der Win32-API-Oberfläche abdecken. Diese Forwarder verwenden die Modulnamen, die auf Windows PCs eingeführt wurden, und nutzen das API Set-System, um Kompatibilität für alle Windows 10 bieten.

Der Ladevorgang verhält sich wie hier:

  1. Auf einem anderen Gerät als einem Windows-PC wird dem Lademodul eine ältere Abhängigkeit Windows PC-Modulnamens angezeigt, die auf dem Gerät nicht vorhanden ist.
  2. Das Lademodul sucht eine API-Satz-Forwarder für dieses Modul und lädt sie in den Arbeitsspeicher.
  3. Die Forwarder-Funktion verfügt über eine Zuordnung für den API-Satz für die aufgerufene Funktion.
  4. Das Lader sucht die richtige Hostbin binär für das gegebene Gerät.

Konzeptionell sieht die Zuordnung wie die folgenden aus:

Importierte DLL: feature1.dll

  • Windows PC -> feature1.dll
  • HoloLens -> feature1.dll -> api-feature1-l1-1-0.dll -> feature1_holo.dll
  • IoT -> feature1.dll-> api-feature1-l1-1-0.dll -> feature1_iot.dll

Das Endergebnis ist funktionell identisch mit der direkten Weiterleitung,erreicht es jedoch so, dass die Anwendungskompatibilität maximiert wird.

Hinweis

Die umgekehrte Weiterleitung bietet nur Abdeckung für eine Teilmenge der Win32-API-Oberfläche. Es ist nicht zulässig, dass Anwendungen, die auf Desktopversionen von Windows 10, auf allen Windows 10 ausgeführt werden.