11. Anlage | |||||
|
|||||
11.2 Schnittstellen zu anderen Sprachen
Für Ada-95-Programme ist es sehr wichtig, mit Systemen, die in anderen Sprachen implementiert sind, effizient kommunizieren zu können. Zum Beispiel ist es von entscheidender Bedeutung, daß Ada-95-Programme Schnittstellen zu Systemen wie z. B. X-Window, Posix und kommerziell verfügbaren fensterbasierten Systemen von Personalcomputern zur Verfügung stellen. Deshalb stellt die Anlage die drei Pragmas "Import", "Export" und "Conventions" zur Anbindung von Software an Ada-Programmen zurVerfügung, die nicht in Ada implementiert ist. Das Wurzelschnittstellenpaket "Interfaces" enthält die Deklarationen von verschiedenen "integer"-Typen für spezifische Hardware sowie die Schiebe- und Rotationsfunktionen für modulare Typen. Die Kind-Pakete "Interfaces.C", "Interfaces.COBOL" und "Interfaces.Fortran" stellen die Typen, Unterprogramme und andere Einträge zur Anbindung der drei Sprachen C, COBOL und Fortran bereit. An Stelle des Pragmas "Interface" in Ada 83 wurden in Ada 95 vier Pragmas aufgenommen, um portable Ada-Software mit Software, die nicht in Ada implementiert ist, zu verbinden: pragma Import([Convention =>] convention_identifier, [Entity =>] local_name [, [External_Name =>] string_expression] [, [Link_Name =>] string_expression]); |
|||||
Mit Hilfe dieses Pragmas lassen sich Unterprogramme
oder Variablen einer anderen Sprachen von Ada aus aufrufen bzw. auf diese
zugreifen. Dazu muß z. B. die zu importierende Unterprogrammspezifikation
in Ada deklariert werden und der Unterprogrammrumpf durch das Pragma "Import"
ersetzt werden. Es können auch mehrere überladene Unterprogrammspezifikationen
zu einem Pragma "Import", das als Rumpf für alle Unterprogrammspezifikationen
dient, deklariert werden.
pragma Export([Convention =>] convention_identifier, [Entity =>] local_name [, [External_Name =>] string_expression] [, [Link_Name =>] string_expression]); Mit Hilfe dieses Pragmas lassen sich aus einer anderen Sprache Unterprogramme oder Variable von Ada aufrufen bzw. läßt sich auf diese zugreifen. Dazu muß z. B. der zu exportierende Unterprogrammrumpf in Ada nach der Deklaration des Pragmas "Export" vollständig angegeben werden.
[Entity =>] local_name); Mit Hilfe dieses Pragmas kann der Programmierer spezifizieren, daß Ada-Typen die Konventionen einer anderen Sprache benutzen sollen. Dies ist notwendig, falls Typen für die Spezifikation von Parametern von importierten Unterprogrammen benötigt werden.
Außerdem sollte das Pragma "Convention" dann verwendet werden, wenn Unterprogramme als "Call-back-Routine" mit anderen Unterprogrammen kommunizieren. Falls ein Unterprogramm in Ada in dieser Art verwendet wird, sollte das Pragma "Convention" sowohl für das Unterprogramm als auch für das Objekt vom Zugriffstyp verwendet werden. Ein Beispiel ist die Kommunikation mit der graphischen X-Window-Schnittstelle (Graphical User Interface GUI).
Andere Sprachen können Maschinensprachen oder andere Hochsprachen wie z. B. Fortran oder C sein. Mit diesen Pragmas sind folgende Möglichkeiten verbunden:
Es soll mit einem in der Sprache C implementierten Programm, das Ereignisse behandelt, die von beiner Maus ausgelöst werden können, von einem Ada-Programm aus kommuniziert werden. Das C-Programm ruft die Ada-Prozedur "Aktion" auf, sobald eine Maustaste betätigt wurde. Daher muß dem C-Programm mitgeteilt werden, welche Prozedur aufgerufen werden soll. Dies wird dadurch erreicht, daß die C-Funktion "Setze_Click" mit der Adresse der Ada-Prozedur als Parameter aufgerufen wird.
Das Pragma "Import" zeigt an, daß der Rumpf der Prozedur "Setze_Click" für das Ada-Programm extern ist. Es gibt ebenfalls ein Pragma "Export", das ein Unterprogramm extern sichtbar macht. Dieses Pragma wird im Programmbeispiel nicht benötigt, da die Adresse des Unterprogramms indirekt über den Zugriffswert übergeben wird. |
|||||
|
|||||