Schnellstart
Von null zu Ihrer ersten Aufgabe in einem anderen Visual-FoxPro-Prozess, in funf Schritten. Gultig fur FoxCore.Runtime 3.4.2.
Bevor Sie anfangen
- FoxCore.Runtime 3.4.2 installiert und registriert: der Installer
FoxCore.Runtime-Setup-3.4.2.exeerledigt das und bringtverify.cmdzur Prufung mit. Siehe Installation. - Visual FoxPro 9 SP2, als Automatisierungsserver registriert - das ist der Prozess, der die Aufgaben ausführt. Seit 3.1.0 kann es ein anderer sein: VFP Advanced oder Ihre eigene
.exe. - Ihre Lizenz, ein JWT: aus dem Kundenportal herunterladen und per Code ubergeben. Siehe Lizenzierung.
1. Prüfen, dass die Engine da ist
Zuerst, dass das COM-Objekt erzeugt wird. Schlägt das fehl, liegt es an der Installation und nicht an Ihrem Code: keine der folgenden Zeilen wird funktionieren.
LOCAL loRt
loRt = CREATEOBJECT("FoxCore.Runtime")
? loRt.Ping() && FoxCore.Runtime 3.4.22. Lizenz aktivieren - und das .T. prüfen
Activate() wirft bei einer ungültigen Lizenz NIE: es liefert .F. und macht weiter. Wer es aufruft und den Rückgabewert nicht ansieht, startet die Engine trotzdem und merkt es viel später, wenn die erste Aufgabe als Failed geboren wird.
LOCAL lcJwt
lcJwt = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...." && hier den JWT aus Ihrem Kundenportal einfügen
IF !loRt.Activate(lcJwt)
MESSAGEBOX("La licencia de FoxCore no es valida.", 16, "FoxCore")
RETURN
ENDIF
? loRt.IsLicensed && .T.Wenn Sie diesen Schritt auslassen, funktioniert der Lebenszyklus weiter - Attach, Ping, Shutdown -, aber jede Aufgabe wird als Failed geboren, mit genau dieser Meldung:
FoxCore.Runtime: no hay una licencia valida para el producto 'FoxCore', asi que la tarea no se ejecuta. Activala por codigo al arrancar: loRt.Activate(<tu JWT>). Se consigue en https://irwinrodriguez.dev/products/foxcore3. Anbinden, starten und pumpen
Das ist der ganze Zyklus, und es ist derselbe Ausschnitt, der die API-Referenz eroffnet. Attach() bindet die Runtime AN DEN THREAD, aus dem Sie es aufrufen. RunScript() liefert die ID sofort: das Skript läuft bereits in einem anderen Prozess. Und Pump() bedient die Worker - ohne es warten sie nur.
LOCAL loRt, lcId
loRt = CREATEOBJECT("FoxCore.Runtime")
? loRt.Activate(lcJwt) && .T. -- Ihre Lizenz, als Zeichenkette
loRt.Attach(_VFP) && bindet die Runtime AN DIESEN Thread
loRt.MaxWorkers = 8
lcId = loRt.RunScript("RETURN 6 * 42", "la primera") && das Skript läuft in einem ANDEREN VFP-Prozess
DO WHILE !loRt.IsCompleted(lcId)
loRt.Pump() && Pump() bedient die Worker; ohne es warten sie nur
DOEVENTS
ENDDO
? loRt.GetState(lcId) && Completed
? loRt.GetResult(lcId) && 252
? loRt.GetError(lcId) && ""
loRt.Shutdown() && IMMER: es beendet die Worker4. Das Ergebnis abholen
GetResult() liefert, was das Skript per RETURN übergeben hat. Solange die Aufgabe nicht erfolgreich beendet ist, liefert es .NULL., also prüfen Sie zuerst den Zustand.
IF loRt.GetState(lcId) == "Completed"
? loRt.GetResult(lcId) && was das Skript zuruckgab
ELSE
? loRt.GetError(lcId) && leer, wenn kein Fehler
ENDIF5. Immer mit Shutdown() schließen
Shutdown() beendet die Worker-Prozesse. Es ist idempotent: zweimal aufrufen schadet nicht. Ohne den Aufruf bleiben verwaiste vfp9.exe-Prozesse ubrig und belegen Speicher - und das ist der häufigste Weg, sich das hier kaputtzumachen.
loRt.Shutdown()Und ab hier
- Muster - der grosse Stapel, Fortschritt mit Balken und Abbrechen-Schaltflache, Handler, die Tafel, und wie das kaputtgeht.
- Beispiele - drei vollstandige Programme zum Kopieren und Ausfuhren.
- API-Referenz - die sechs Typen und alle ihre Mitglieder, mit dem, was jedes bei einem Fehler liefert.
CREATEOBJECT("FoxCore.FoxCoreClass") sagt, ist das die andere Engine - sie existiert weiter und wird weiter unterstutzt, aber sie ist nicht die, die diese Seite beschreibt. Die Entsprechungstabelle steht in "Was es nicht mehr gibt", am Ende der Referenz. Weiter: Erweiterte Muster ->