__QUERYINTERFACE

提示!

用于编译原因定义转化相关的实例必须是一个基本接口 __SYSTEM.IQueryInterface 的扩展并且编译器版本必须 >= 3.3.0.20。

语法:

 __QUERYINTERFACE(<ITF_Source>, < ITF_Dest>)

此操作的第一个操作数为一个接口参照或者一个内部类型的功能块实例,第二个操作数是一个接口参照。经过 __QUERYINTERFACE 的处理 ITF_Dest 将指向一个内部的接口如果此接口是从 ITF 中的接口源扩展。在这种情况下转化将会成功并且操作的结构将会返回为 TRUE。在其他所有情况操作将返回 FALSE。

显示转化的前提条件是不但 ITF_Source but 而且 ITF Dest 都必须是 __System.IQueryInterface 的一个扩展。这个接口隐式提供并且不需要其他函数库。

   

ST 示例:

INTERFACE ItfBase EXTENDS __System.IQueryInterface

METHOD mbase : BOOL

END_METHOD

INTERFACE ItfDerived1 EXTENDS ItfBase

METHOD mderived1 : BOOL

END_METHOD

INTERFACE ItfDerived2 EXTENDS ItfBase

METHOD mderived2 : BOOL

END_METHOD

PROGRAMM POU

VAR

itfderived1 : ItfDerived1;

itfderived2 : ItfDerived2;

bTest1, bTest2, xResult1, xResult2: BOOL;

END_VAR

xResult1 := __QUERYINTERFACE(itfbase, itfderived1); // variablen vom Type ItfBase bzw ItfDerived1

xResult2 := __QUERYINTERFACE(itfbase, itfderived2); // variablen vom Type ItfBase bzw ItfDerived2

IF (xResult1 = TRUE) THEN

bTest1 := itfderived1.mderived1();

ELSIF xResult2 THEN

bTest2 := itfderived2.mderived2();

END_IF