__QUERYPOINTER

Der Operator ist eine Erweiterung der IEC61131-3.

Der Operator ermöglicht zur Laufzeit die Typkonvertierung einer Interface-Reference eines Funktionsbausteins auf einen Pointer. Der Operator liefert ein Ergebnis vom Typ BOOL zurück. TRUE bedeutet, dass TwinCAT die Konvertierung erfolgreich durchgeführt hat.

__QUERYPOINTER 1:

Aus Kompatibilitätsgründen muss die Definition des zu konvertierenden Pointers eine Erweiterung des Basis-Interface __SYSTEM.IQueryInterface sein.

Syntax: __QUERYPOINTER (<ITF_Source>, <Pointer_Dest>)

Der Operator bekommt als ersten Operanden eine Interface-Referenz oder eine FB-Instanz mit den gewünschten Zieltypen und als zweiten Operanden einen Pointer. Nach Abarbeiten von __QUERYPOINTER enthält Pointer_Dest den Pointer auf diejenige Referenz oder Instanz eines Funktionsbausteins, auf die die Interface-Referenz ITF_Source aktuell verweist. Pointer_Dest ist nicht getypt und kann auf einen beliebigen Typ gecastet werden. Sie müssen den Typ sicherstellen. Beispielsweise könnte das Interface eine Methode anbieten, die einen Typ-Code zurück liefert.

Beispiel:

Schnittstellen:

INTERFACE I_Base EXTENDS __System.IQueryInterface
METHOD Base : BOOL
INTERFACE I_Derived EXTENDS I_Base
METHOD Derived : BOOL

Funktionsbaustein:

FUNCTION_BLOCK FB_Variante IMPLEMENTS I_Derived
METHOD Base : BOOL
METHOD Derived : BOOL

Programm:

PROGRAM MAIN
VAR
    iDerived   : I_Derived;
    fbVariante : FB_Variante;
    bResult    : BOOL;
    bTest      : BOOL;
    pFB        : POINTER TO FB_Variante;
END_VAR
iDerived := fbVariante;
bResult  := __QUERYPOINTER(iDerived, pFB);

IF bResult THEN
    bTest := pFB^.Derived();
END_IF