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.
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.
* 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.
* 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 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.
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= .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 ->