__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.
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