IR
irwinrodriguez.dev
Zurück zur Dokumentation

FoxBridge

FoxBridge holt das .NET-Ökosystem nach Visual FoxPro. Sie instanziieren jede .NET-Klasse, rufen ihre Methoden auf, lesen und schreiben Eigenschaften, arbeiten mit generischen Sammlungen (List<T>, Dictionary<K,V>), rufen statische Member auf und verwenden async/await – alles mit der Punktsyntax Ihres gewohnten VFP-Codes. Ohne COM, und ohne dass etwas zu registrieren wäre.

In diesem Abschnitt

  • Installation: Welche Dateien zu kopieren sind, die .NET-Laufzeit und das Freischalten der Lizenz.
  • Erste Schritte: Ihr erstes .NET-Objekt aus VFP in weniger als fünf Minuten.
  • Beispiele: Zwanzig aufeinander aufbauende Beispiele, von StringBuilder bis HttpClient und async/await.
  • API-Referenz: Die FoxBridge-Klasse und die Sammlungs-Proxys, Methode für Methode.

So funktioniert es

Zwei Schichten und eine einzige Klasse. FoxBridge.prg ist die API, die Sie aus VFP sehen; darunter startet x86\FoxBridgeNE.dll die .NET-Laufzeit und reicht die Aufrufe weiter, gestützt auf FoxBridge.dll, Nexum.dll und die beiden .json-Dateien daneben. Alle fünf Dateien dieses Unterordners gehören zusammen.

Bridge freischalten und ein .NET-Objekt erzeugen
* Initialisieren und freischalten (die zwei Zeilen gehoeren zusammen)
loBridge = NEWOBJECT("FoxBridge", "FoxBridge.prg")
IF !loBridge.Activate(lcJwt)
    ? loBridge.GetLastError()
    RETURN
ENDIF

* Und ab hier: .NET mit Punktsyntax
loSB = loBridge.Create("System.Text.StringBuilder", "Hallo ")
loSB.Append("aus .NET!")
? loSB.ToString()   && "Hallo aus .NET!"
Die Lizenz wird immer verlangt In der IDE und in der kompilierten EXE gleichermaßen. Sie ist ein JWT, das Sie beim Start an loBridge.Activate() übergeben, und die Prüfung steht am Anfang aller fünfzig Einstiegspunkte des Motors: ohne Freischaltung nicht einmal ein StringBuilder. Ist die Wartung abgelaufen, läuft das Produkt weiter; was abläuft, ist der Anspruch auf neue Versionen.

Was enthalten ist

  • Instanziierung jedes .NET-Typs, mit bis zu zehn Konstruktorparametern
  • Generische Sammlungen: List<T>, Dictionary<K,V> und Arrays, 1-basiert wie in VFP
  • Statische Member: Klassenmethoden, -eigenschaften und -felder, über Static()
  • Enums werden über ihren Namen aus dem statischen Proxy gelesen (loFileMode.Create), statt sich die Zahl zu merken
  • Automatische Überladungsauflösung und Typumwandlung von VFP nach .NET
  • async/await transparent: auf die Task wird gewartet, und sie liefert ihr Ergebnis
  • Laden eigener kompilierter DLLs, mit LoadAssembly()
  • Neun fertige Satelliten und ein Tutorial mit ClosedXML und iText, im Paket selbst (die Tabelle unten)

Die neun Satelliten

Sie liegen im Paket unter Satellites\ und sind VFP-.prg-Dateien, die Sie lesen und ändern können: jede kapselt ein Stück .NET in Funktionen mit FoxPro-Namen, damit Sie Create() nicht von Hand schreiben. Geladen wird mit SET PROCEDURE TO fb_http ADDITIVE, und die Bridge übergeben Sie einmal mit FB_SET_INSTANCE(loBridge); alle teilen sie sich.

SatellitWas es kapselt
fb_httpAnfragen mit HttpClient: GET, POST, PUT und DELETE, der Statuscode per HEAD und der Download in eine Datei.
fb_jsonJSON per Punktpfad auf Basis von System.Text.Json lesen, prüfen und formatieren; und mit Funktionen in reinem VFP aufbauen.
fb_cryptoHashes von Text und Dateien, HMAC, AES (Text und Dateien), RSA (Schlüssel, verschlüsseln, signieren und prüfen), sichere Zufallswerte und Base64.
fb_emailE-Mail per SMTP mit SmtpClient: Server und Absender festlegen, senden und eine Adresse prüfen.
fb_ioZIP (erstellen, entpacken, hinzufügen und auflisten), Dateien (kopieren, verschieben, löschen, Größe), Ordner und Pfade.
fb_processProzesse starten und ihren Exit-Code oder ihre Ausgabe abholen, sie auflisten und beenden, eine Datei oder URL mit ihrem Programm öffnen, und Umgebungsvariablen.
fb_dialogsMeldungsfenster, Datei öffnen und speichern, Ordnerauswahl und die Zwischenablage. Er ist der einzige, der die .NET Desktop Runtime braucht, weil er WinForms verwendet.
fb_aixlFührt AIXL-Skripte über VFP-Cursor aus. Er braucht die DLL und die Lizenz von AIXL, die derzeit nicht verkauft werden.
fb_aixl_easyDieselbe AIXL-Schicht als einzeilige Funktionen, etwa AIXL_CLASSIFY(). Gleiche Voraussetzung wie fb_aixl.

Voraussetzungen

KomponenteVoraussetzung
Visual FoxProVFP 9.0 SP2 (x86). Das Paket enthält auch x64\ für 64-bittiges VFP Advanced
WindowsWindows 10 oder 11
.NETLaufzeit 8.0 oder neuer, in der Architektur des Prozesses: bei VFP 9 die x86-Variante
COMKeines. Keine Registrierung, kein Installer und kein Eintrag in der Windows-Registry