下面是我在MSDN上摘录的有关ANY的参考,这里PTSCREEN应当是POINT类型(即由X,Y组成的复合类型)。某些 DLL 过程的同一个参数能够接受多种数据类型。如果需要传递多种类型的数据,可以将参数声明为 As Any,从而取消类型限制。例如,根据需要,下面的声明中的第三个参数 (lppt As Any) 既可以传递一个 POINT 结构的数组,也可以传递一个 RECT 结构:Declare Function MapWindowPoints Lib "user32" Alias _
"MapWindowPoints" (ByVal hwndFrom As Long, _
ByVal hwndTo As Long, lppt As Any, _
ByVal cPoints As Long) As LongAs Any 子句提供了一定的灵活性,但是,由于它不进行任何的类型检查,风险也随之增加。如果不进行类型检查,那么在调用过程时用错类型的可能性增加,这可能导致各种问题,包括应用程序的失败。在使用 As Any 子句时,必须仔细检查所有参数的类型。在消除了类型限制以后,Visual Basic 假定参数以传引用方式传递。在实际调用过程时,如果要使用传值方式,可以加入 ByVal。字符串将以传值方式传递,因此传递的是指向字符串的指针,而不是指向指针的指针。