Windows-Schnittstellen: Unterschied zwischen den Versionen

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „__FORCETOC__ == Grundsätzliches == Durch die Möglichkeit, aus Xbase-Programmen heraus auf Windows APIs zuzugreifen, erweitern sich die Möglichkeiten des P…“)
 
Keine Bearbeitungszusammenfassung
Zeile 4: Zeile 4:


Durch die Möglichkeit, aus Xbase-Programmen heraus auf Windows APIs zuzugreifen, erweitern sich die Möglichkeiten des Programmierers.
Durch die Möglichkeit, aus Xbase-Programmen heraus auf Windows APIs zuzugreifen, erweitern sich die Möglichkeiten des Programmierers.
Die Windows APIs sind grundsätzlich in DLLs hinterlegt, die mit den DLL-Funktionen von Xbase++ angesprochen werden können.


Problematisch an dieser Stelle ist jedoch, dass die Schnittmenge zwischen Xbase++ und den Windows APIs nur relativ einfache Feldtypen umfasst. Wenn komplexere Strukturen gefordert werden, muss der Programmierer entweder auf die von Alaska Software bereitgestellte BAP Bibliothek zurückgreifen, oder ein 3rd Party Produkt wie [[OT4XB]].
Problematisch an dieser Stelle ist jedoch, dass die Schnittmenge zwischen Xbase++ und den Windows APIs nur relativ einfache Feldtypen umfasst. Wenn komplexere Strukturen gefordert werden, muss der Programmierer entweder auf die von Alaska Software bereitgestellte BAP Bibliothek zurückgreifen, oder ein 3rd Party Produkt wie [[OT4XB]].
== Programmierung ==
Der Zugriff auf DLLs benötigt - analog zum Low-Level Zugriff auf Dateien - eine Verbindung zwischen dem Xbase-Programm und der betroffenen DLL. Diese Verbindung wird durch einen DLL-Handle abgebildet.
Es gibt zwei Wege für den Zugriff. Der erste Weg führt über die Funktion [[DllCall()]] und beinhaltet das implizite Öffnen der DLL, die Ausführung des API und das Schliessen der DLL. Wenn nur ein Zugriff benötigt wird, ist dies von der Programmierung der am wenigsten aufwändige Weg.
Die Alternative ist ein Öffnen der [[DllLoad()]], Ausführen des/der API/s mittels [[DllCall()]] und ein abschliessendes Schliessen mittels [[DllUnLoad()]].
Da bei [[DllCall()]] standarmässig Xbase-orientierte Calling Conventions verwendet werden, sollte die Header-Datei "Dll.ch" eingebunden werden.




Zeile 15: Zeile 28:


=== Öffnen einer URL im Standard-Browser ===
=== Öffnen einer URL im Standard-Browser ===
Um eine URL über den Standard-Browser zu öffnen, kann der folgende Programm-Code verwendet werden:
cProgram := "RunDLL32.exe"
cLine    := "url.dll,FileProtocolHandler " + cURL  // im Format http(s)://www.domain.org/
RunShell(cLine, cProgram, .T., .T.)
In diesem Beispiel bedienen wir uns indirekt der URL.dll, indem RunDLL32.exe aufgerufen wird, mit der Anforderung, aus der URL.dll das API FileProtocolHandler auszuführen und die vom Programm vorgegebene URL zu öffnen.





Version vom 17. Juni 2013, 13:50 Uhr


Grundsätzliches

Durch die Möglichkeit, aus Xbase-Programmen heraus auf Windows APIs zuzugreifen, erweitern sich die Möglichkeiten des Programmierers.

Die Windows APIs sind grundsätzlich in DLLs hinterlegt, die mit den DLL-Funktionen von Xbase++ angesprochen werden können.

Problematisch an dieser Stelle ist jedoch, dass die Schnittmenge zwischen Xbase++ und den Windows APIs nur relativ einfache Feldtypen umfasst. Wenn komplexere Strukturen gefordert werden, muss der Programmierer entweder auf die von Alaska Software bereitgestellte BAP Bibliothek zurückgreifen, oder ein 3rd Party Produkt wie OT4XB.


Programmierung

Der Zugriff auf DLLs benötigt - analog zum Low-Level Zugriff auf Dateien - eine Verbindung zwischen dem Xbase-Programm und der betroffenen DLL. Diese Verbindung wird durch einen DLL-Handle abgebildet.

Es gibt zwei Wege für den Zugriff. Der erste Weg führt über die Funktion DllCall() und beinhaltet das implizite Öffnen der DLL, die Ausführung des API und das Schliessen der DLL. Wenn nur ein Zugriff benötigt wird, ist dies von der Programmierung der am wenigsten aufwändige Weg.

Die Alternative ist ein Öffnen der DllLoad(), Ausführen des/der API/s mittels DllCall() und ein abschliessendes Schliessen mittels DllUnLoad().

Da bei DllCall() standarmässig Xbase-orientierte Calling Conventions verwendet werden, sollte die Header-Datei "Dll.ch" eingebunden werden.


Anwendungsbeispiele

Öffnen einer URL im Standard-Browser

Um eine URL über den Standard-Browser zu öffnen, kann der folgende Programm-Code verwendet werden:

cProgram := "RunDLL32.exe"
cLine    := "url.dll,FileProtocolHandler " + cURL  // im Format http(s)://www.domain.org/
RunShell(cLine, cProgram, .T., .T.)

In diesem Beispiel bedienen wir uns indirekt der URL.dll, indem RunDLL32.exe aufgerufen wird, mit der Anforderung, aus der URL.dll das API FileProtocolHandler auszuführen und die vom Programm vorgegebene URL zu öffnen.


Öffnen einer Datei mit dem Standard-Programm

(Artikelinarbeit)