__QUERYPOINTER

提示!

由于兼容性的原因内部接口相关的定义必须是一个基本的 __SYSTEM.IQueryInterface 接口的扩展并且编译器版本必须 >= 3.3.0.20。

语法:

__QUERYPOINTER (<ITF_Source>, < Pointer_Dest>)

第一个操作数需要接口参考或者一个内部类型的功能块实例,第二个参数是一个未知类型的指针。经过 __QUERYPOINTER 的处理指针 _Dest 将会指向内部接口相关的接口地址。在这种情况下转化成功处理并且操作的结果返回 TRUE。在其他情况下操作返回 FALSE。 Pointer_Dest 是一个未知类型并且可以被转化为任何类型。当前的类型必须被编程系统允许。例如实例将提供一个方法返回一个类型代码。

一个明确转化的前提是 ITF_Source 是一个 __System.IQueryInterface 接口的扩展。这个接口是内部提供并且不需要函数库支持。

 

示例

INTERFACE Itf EXTENDS __System.IQueryInterface 

FUNCTION_BLOCK FBVariant IMPLEMENTS ITF 

METHOD m1 : BOOL 
VAR
END_VAR
m1 := TRUE;
END_METHOD 
 
PROGRAMM POU 
VAR 
  itf1 : Itf; 
  insV : FBVariant; 
  xResult, xTest : BOOL; 
  pVar: POINTER TO FBVariant; 
END_VAR 
itf1 := insV; 
xResult := __QUERYPOINTER(itf1, pVar);
IF xResult THEN 
  xTest := pVar.m1(); 
END_IF