回调VI含有用户自己编写的处理特定ActiveX或.NET事件的代码。控件和对象产生注册事件时,必须创建一个回调VI处理来自ActiveX控件或.NET对象的事件。该事件发生时,将运行回调VI。创建回调VI时,LabVIEW将创建一个重入VI,可打开和编辑这个VI处理事件。回调VI包含以下元素:

  • 事件通用数据包含以下元素:
    • 事件源是指规定事件源(例如,LabVIEW、ActiveX或.NET)的数值控件。值为1表明是ActiveX事件。数值2表明是.NET事件。
    • 事件类型指定发生哪一种事件。对于用户接口事件,该值是枚举型,对于ActiveX、.NET和其他事件源,则是32位无符号整型。对于ActiveX事件,事件类型代表被注册事件的方法代码或编码。可忽略.NET的这个要素。
    • 时间标识是指定事件发生时间的标识,以毫秒为单位。
  • 控件引用指向发生事件的ActiveX、自动化引用句柄或.NET对象。
  • 事件数据是回调VI所处理事件的特定参数簇。当从事件回调注册函数选择一个事件时,LabVIEW将决定相应的事件数据。如果事件没有任何关联数据,LabVIEW将不会为回调VI创建控件。
  • 事件数据输出是针对回调VI处理的事件的可修改的参数簇。只有当ActiveX或.NET事件有输出参数时该元素才可用。
  • (可选)用户参数是当ActiveX或.NET对象产生事件时,用户需要传送到回调VI的数据。
注: 只要所用VI的接线器与事件数据的接线器相匹配,就可以使用一个现有的VI作为回调VI。该回调VI必须是重入VI,对该VI的引用类型也必须严格定义。

要使回调VI无中断地执行,LabVIEW将延迟处理操作系统消息,直到回调VI停止执行或打开一个模态窗口。LabVIEW延迟处理操作系统消息时,不能与LabVIEW前面板进行交互。模态窗口保持活动或在所有LabVIEW窗口的最前面,直至用户关闭该窗口或打开另一个模态窗口。模态窗口打开时无法与其他窗口交互。LabVIEW中的绝大多数窗口为模态窗口。

其他进程运行时,不能从LabVIEW的回调VI或DLL打开非模态窗口。关于调用回调VI或DLL的非模态窗口的详细信息,见通过编程调用非模态窗口

注:ActiveX对象同步调用ActiveX回调VI。这意味着对象在执行回调的过程中不能运行其他代码并可能造成死锁。应仔细考虑回调程序框图和其他代码之间的交互。例如,如在子程序框图执行过程中调用ActiveX回调VI中的非重入子程序框图可能导致死机。