Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| entwicklertreffen:140814 [19.08.2014 14:12] – angelegt Joachim Hilgers | entwicklertreffen:140814 [Unbekanntes Datum] (aktuell) – Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | Im August 2014 wurde auf dem Treffen gezeigt, wie einfach sich DotNet-Komponenten aus FoxPro heraus aufrufen lassen, | + | Im August 2014 wurde auf dem Treffen gezeigt, wie einfach sich DotNet-Komponenten aus FoxPro heraus aufrufen lassen, |
| Um wwDotnetBridge unter VFP einzusetzen, | Um wwDotnetBridge unter VFP einzusetzen, | ||
| Zeile 7: | Zeile 7: | ||
| * " | * " | ||
| - | < | + | **Einfache Anwendung** |
| + | |||
| + | Das mitgelieferte Beispiel zeigt, wie einfach man z.B. die Liste der laufenden Prozesse in einen Cursor einlesen kann: | ||
| + | |||
| + | < | ||
| LOCAL loBridge as wwDotNetBridge OF wwDotNetBridge.prg | LOCAL loBridge as wwDotNetBridge OF wwDotNetBridge.prg | ||
| Zeile 31: | Zeile 35: | ||
| loBridge.unload() | loBridge.unload() | ||
| + | |||
| </ | </ | ||
| + | **Mögliche Performaceverbesserungen** | ||
| - | Vorgestellt | + | Weiterhin |
| - | Dazu wurde | + | Im folgenden Beispiel wird z.B. in einer Million Durchläufen eine Summe gebildet. Der erste Durchlauf erfolgt in nativem FoxPro-Code. Der 2. Durchlauf erfolgt innerhalb einer selbst erzeugten .Net-DLL. In diesem Fall dauerte die Berechnung in VFP rund 0,4 Sekunden und in .net 0,001 Sekunden... |
| - | * http:// | + | < |
| - | * {{: | + | |
| + | LOCAL loBridge as wwDotNetBridge OF wwDotNetBridge.prg | ||
| + | LOCAL loRechnen | ||
| + | do wwDotNetBridge | ||
| + | loBridge = CreateObject(" | ||
| + | |||
| + | *** Load our custom assembly | ||
| + | loBridge.LoadAssembly(" | ||
| + | IF loBridge.lError | ||
| + | ? loBridge.cErrorMsg | ||
| + | | ||
| + | ENDIF | ||
| + | |||
| + | loRechnen = loBridge.CreateInstance(" | ||
| + | IF loBridge.lError | ||
| + | ? loBridge.cErrorMsg | ||
| + | | ||
| + | ENDIF | ||
| + | |||
| + | LOCAL lnAnzahl, ln, lnStart, lnSum | ||
| + | lnAnzahl = 1000 * 1000 | ||
| + | lnStart = SECONDS() | ||
| + | ? " | ||
| + | ? "VFP, Durchläufe:", | ||
| + | lnSum = 0 | ||
| + | FOR ln=0 TO lnAnzahl STEP 1 | ||
| + | lnSum = lnSum + ln | ||
| + | ENDFOR | ||
| + | ? " | ||
| + | ? " | ||
| + | |||
| + | ? " | ||
| + | lnStart = SECONDS() | ||
| + | ? ".Net, Durchläufe:", | ||
| + | lnSum = loBridge.Invokemethod(loRechnen," | ||
| + | ? " | ||
| + | ? " | ||
| + | |||
| + | loBridge.unload() | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | <code csharp> | ||
| + | |||
| + | namespace MeineDLL | ||
| + | { | ||
| + | public class rechnen | ||
| + | { | ||
| + | public Int64 schleife(Int32 anzahl) | ||
| + | { | ||
| + | Int64 summe = 0; | ||
| + | for (Int64 i = 0; i <= anzahl; i++) | ||
| + | { | ||
| + | summe = summe + i; | ||
| + | } | ||
| + | return summe; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||