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; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ |