Table of Contents

Funktions-Interpreter

Informationen

  • Kategorien: Kernel | Klassenformeln
  • Version: 12.1.0.977
  • Veröffentlichungsdatum: Donnerstag, 9. Juli 2009
  • Entwickler: Fischer
  • Benötigt Datenbankänderung: Nein
  • Betreff: Funktions-Interpreter

Beschreibung

Funktionen können über Kommandozeilenparameter und/oder OLE-Automation von externen Programmen mit Parameterübergabe und Abfrage des Rückgabewertes aufgerufen werden.

In Klassenformeln müssen solche Funktionen als "safe" deklariert werden, die Deklaration "safe" ist ähnlich wie "const" ein Merkmal der Funktion.

Z.B. "safe function int DoIt( int $i )"


Der Aufruf über COM hat folgende Syntax

int nResult = CallInterpreter ( byval string strInterpretername, byval string strCode, byref variant varResult, byref strError )

Rückgabe: nResult ist 1 bei Erfolg, sonst 0

Parameter: strInterpretername - der Name des internen Interpreters, muss immer "SAFEFCTCALL" als Wert haben strCode - hier muss der Funktionsaufruf mit den Werten übergeben werden varResult - erhält den Rückgabewert der eigentlichen Funktion, der Datentyp ist abhängig vom Rückgabedatentyp der Funktion (integer, string, double, ...) strError - erhält eine Fehlerbeschreibung, wenn ein Fehler aufgetreten ist


Der Aufruf über Kommandozeile erfolgt nach folgender Syntax: /Interpreter sCode


Für strCode ist im obigen Beispiel DoIt( 5 ) einzusetzen.

Hinweis: Zum Aufruf der COM-Schnittstelle über VBA wird die Schnittstellenbeschreibung benötigt (pitfm.tlb), diese ist unter Dokumente abgelegt.

Bilder

Funktions-Interpreter

Dokumente

ZI_150709_122936

Beispielcode

safe function int Add( int $a, int $b )
{
	return $a + $b;
}

Aufruf in Visual Basic 6.0 (via COM):

    Dim oPitApp
    Set oPitApp = CreateObject("pitfm.application")
    Dim nResult
    Dim sError As String
    Dim bSuccess As Boolean
    Dim sCode As String
    sCode = "Add( 3, 4 )"
    bSuccess= oPitApp.CallInterpreter("SAFEFCTCALL", sCode, nResult, sError)
    If (bSuccess = False) Then
        MsgBox sError
    Else
        MsgBox nResult
    End If

Aufruf per Kommandozeile (macht hier keinen Sinn, da der Rückgabewert nicht ausgewertet werden kann, nur als Demo):

  pitfm.exe /INTERPRETER Add( 3, 4 )