IR
irwinrodriguez.dev
Zurück zur Dokumentation

Schnellstart

In weniger als fünf Minuten läuft Ihre erste .NET-Klasse aus VFP heraus.

Schritt 1: initialisieren und freischalten

Einmal, beim Start Ihrer Anwendung. Activate() ist kein Extra: die Lizenz wird an jedem Einstiegspunkt des Motors geprüft, ohne sie entsteht also nicht einmal ein Objekt.

Bridge erzeugen und Lizenz freischalten
LOCAL loBridge
loBridge = NEWOBJECT("FoxBridge", "FoxBridge.prg")

IF !loBridge.Activate(MeinSystem_LizenzHolen())
    ? "FoxBridge: " + loBridge.GetLastError()
    RETURN
ENDIF

* Optionale Pruefung, dass alles geladen wurde:
? loBridge.Version()   && FoxBridge Runtime 1.0.0 / Core ...

Schritt 2: Ihr erstes .NET-Objekt erstellen

System.Text.StringBuilder ist eine .NET-Klasse, die Zeichenketten effizient zusammensetzt. Sie ist das „Hallo Welt“ von FoxBridge.

StringBuilder: das Hallo Welt von .NET
* Einen StringBuilder mit Anfangstext erzeugen
loSB = loBridge.Create("System.Text.StringBuilder", "Hallo ")

* Methoden mit der gewohnten Punktsyntax aufrufen
loSB.Append("Welt ")
loSB.Append("aus .NET!")

* In eine VFP-Zeichenkette verwandeln
? loSB.ToString()   && "Hallo Welt aus .NET!"

* Und eine Eigenschaft lesen
? loSB.Length       && 20

* Freigeben
loSB = .NULL.

Schritt 3: mit generischen Sammlungen arbeiten

FoxBridge übersetzt List<T> und Dictionary<K,V> in VFP-Proxys. Die Indizierung beginnt bei 1, wie in VFP.

List<String> und Dictionary aus VFP
* Eine List<String> erzeugen
loListe = loBridge.Create("List<String>")

loListe.Add("Visual FoxPro")
loListe.Add("C#")
loListe.Add("F#")

? "Gesamt:", loListe.Count()      && 3
? "Erstes:", loListe.Item(1)      && "Visual FoxPro"

FOR i = 1 TO loListe.Count()
    ? loListe.Item(i)
ENDFOR

loListe.Remove("F#")
? "Nach Remove:", loListe.Count()   && 2

* Ein Dictionary<K,V>. Achtung: die Methode heisst ContainsKey,
* nicht Contains.
loWoerterbuch = loBridge.Create("Dictionary<String,String>")
loWoerterbuch.Set("name", "Irwin")
? loWoerterbuch.Get("name")           && "Irwin"
? loWoerterbuch.ContainsKey("name")   && .T.
? loWoerterbuch.Count()               && 1

loListe       = .NULL.
loWoerterbuch = .NULL.

Item() und Get() liefern den Wert, und das ist genau das, was Sie wollen, wenn die Sammlung Zeichenketten oder Zahlen enthält. Steckt darin ein .NET-Objekt, holen Sie den Proxy mit GetObject().

Schritt 4: statische Methoden aufrufen

Viele .NET-Klassen haben statische Member, ohne dass etwas zu instanziieren wäre. Sie erreichen sie mit loBridge.Static().

System.Math, System.IO.File und ein Enum über seinen Namen
* System.Math ist eine statische Klasse
loMath = loBridge.Static("System.Math")

? loMath.Abs(-42)       && 42
? loMath.Sqrt(144)      && 12
? loMath.Max(10, 20)    && 20
? loMath.PI             && 3.14159...

* System.IO.File: Dateien lesen und schreiben
loFile = loBridge.Static("System.IO.File")
loFile.WriteAllText("C:\test.txt", "Hallo von FoxBridge")
? loFile.Exists("C:\test.txt")     && .T.
? loFile.ReadAllText("C:\test.txt")

* Auch Enums sind statische Proxys, und ihre Member werden ueber
* den Namen gelesen, statt die Zahl zu schreiben:
loFileMode = loBridge.Static("System.IO.FileMode")
? loFileMode.Create     && 2

loMath = .NULL.
loFile = .NULL.

Schritt 5: eine eigene DLL laden

FoxBridge lädt jede .NET-DLL, die Sie selbst kompiliert haben.

Eigene DLL laden und eine ihrer Klassen verwenden
llOk = loBridge.LoadAssembly("C:\MeineApp\bin\MeineLogik.dll")

IF llOk
    loObj   = loBridge.Create("MeineFirma.MeineLogik.Rechner", 0.19)
    lnSumme = loObj.MitMwStBerechnen(1000.00)
    ? "Summe mit MwSt:", lnSumme
    loObj = .NULL.
ELSE
    ? "Fehler:", loBridge.GetLastError()
ENDIF
Goldene Regel Geben Sie FoxBridge-Objekte mit = .NULL. frei, sobald Sie sie nicht mehr brauchen: das gibt den Speicher auf der .NET-Seite frei. Und denken Sie daran, dass GetLastError() beim Lesen verbraucht wird: die zweite Lesung direkt danach kommt leer zurück, heben Sie den Text also in einer Variablen auf, wenn Sie ihn zweimal brauchen.

Weiter: Beispiele ->