在向大家详细介绍VB.NET简单数据类型之前,首先让大家了解下某些DLL过程的同一个参数能够接受多种数据类型,然后全面介绍VB.NET简单数据类型。
某些DLL过程的同一个参数能够接受多种数据类型。如果需要传递多种类型的数据,可 以将参数声明为AsAny,从而取消类型限制。例如,下面的声明中的第三个参数(lpptAsAny) 既可以传递一个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 Long
AsAny子句提供了一定的灵活性,但是,由于它不进行任何的类型检查,风险也随之增 加。因此在使用AsAny子句时,必须仔细检查所有参数的类型。
正确的函数声明是在VB中调用动态连接库的前提,但要想在VB中用对、用好动态库中的函数,仅仅有声明还是远远不够的。前面已经说过,由于VB不能验证应用程序传递到动态连接库中的参数值是否正确,因此就要求程序员应对参数类型有非常详细的了解,否则很容易引起应用程序发生通用保护错或导致潜在的Bug,降低软件的可靠性。
VB.NET简单数据类型
VB.NET简单数据类型是指Numeric数据类型(包括Integer、Long、Single、Double、Currency类型)、Byte数据类型和Boolean数据类型。它们的共同的特点是结构简单,操作系统在处理时不必进行特殊的转换。
VB.NET简单数据类型参数的传递比较简单。我们知道,在VB中传递参数的方式有两种:传值(Byval) 和传址(ByRef),缺省的方式是传址。所谓传值,就是对一个变量的具体值进行传递;而传址则是传递变量的地址。例如,在VB程序中需要将一个整型变量m=10的值传进动态库,如果用传值方式,那么传进动态库的值就是10,而在传址方式下,传入的则是变量m的地址,相当于C/C++ 中&m的值。需要注意的是,以传值方式传进动态连接库的变量,其值在动态库中是不能被改变的;如果需要在动态连接库中修改传入参数的值,则必须使用传址方式。一般来说,在VB 和动态连接库之间传递单个的VB.NET简单数据类型,只要注意了以上几个方面就可以了。当需要将一个VB.NET简单数据类型的整个数组传进动态库时,必须将相应参数声明为传址方式,然后把数组的第一个元素作为参数传入,这样在动态连接库中就得到了数组的首地址,从而可以对整个数组进行访问。例如,声明了一个名为ReadArray的DLL过程,要求传入一个整型数组aArray:
- Declare Function ReadArray Lib "mydll.dll" _
- (aArray As Integer) As Integer
- 在调用时可以采用如下方式:
- Dim ret,I(5) as Integer
- … …
- ret = ReadArray(I(0)) '
【编辑推荐】