vb.net Decalre声明语句说明
Decalre声明语句采用Declare语句的方式声明API,没有返回值的函数的格式如下: [ <attrlist>] [ Public | Private | Protected | Friend | Protected Friend ] [ Shadows ]Declare [ Ansi | Unicode | Auto ] [ Sub ] 若函数有返回值,则格式如下: [ <attrlist>] [ Public | Private | Protected | Friend | Protected Friend ] [ Shadows ]Declare [ Ansi | Unicode | Auto ] [ Sub ] 每一个部分的说明简述如表3.1.1。 Arglist为函数的参数列表,函数中的参数数目因不同的函数而不同,但均符合下列的格式: [ <attrlist>][ Optional ] [ ByVal | ByRef ] [ ParamArray ] 上述程序中每一部分的说明如表3.1.2。 表3.1.2 参数列表使用方式说明
attrstr专门用来描述特征项,所谓的特征项是描述性标记,它提供与程序设计项目相关的其他信息,例如类型、字段、方法和属性。其他应用程序可以参考特征项中的额外信息来判断如何使用这些项目。特征项会与Visual Basic .NET组件(Assembly)的中继数据一起存储,其中包含调试和内存回收所需的信息,以及安全性特征项、封送处理数据、扩充类别和成员定义、版本绑定和运行库(Runtime)所需的任何其他信息。 特征项在程序中的用法有多种,在本书将使用的为以下两种。 (1) 描述与机器码相互操作时如何封送处理方法参数,这将使用MarshalAsAttribute类别。通用语言运行库(Common Language Runtime)封送处理字符串参数为BStr,但所引用函数中的字符串处理方式可能不是BStr,这种情形下,可以使用MarshalAsAttribute特征项封送处理字符串为LPStr、LPWStr、LPTStr或BStr其中的一种。这样就可符合函数的原始定义。 BStr是固定长度双字节的Unicode字符字符串;LPStr是单一字节、以Null字符结束的ANSI字符字符串;LPWStr是2 字节、以Null字符结束的Unicode字符字符串;LPTStr则是平台相依字符字符串,在Windows 98上为ANSI,在 Windows NT 和Windows XP上为Unicode。 (2) 使用DllImportAttribute类调用Unmanaged程序代码。这部分在下一小节说明。 以下的程序代码调用函数MessageBox,并且将函数名称改为MBox,而字符串的调用则指定为Auto(表示自动转换)。 Declare Auto Function MBoxLib "user32.dll" Alias "MessageBox" (ByVal hWnd As Integer,ByVal txt As String,ByValText As String,ByVal Typ AsInteger) As Integer 以下的程序代码则是调用创建通信用的设备控制区块(Device Control Block,DCB),其中使用了MarshalAs特征项,用来指明字符串的封送方式,命令.NET环境依此方式传送参数给API函数。 Declare Function Lib "user32.dll" BuildCommDCB(<MarshalAs(UnmanagedType.LPStr)> ByVal lpDef As String,ByRef lpDCB As DCB) As Integer 有了上述知识的了解,配合特征项的使用,就可以成功地声明函数。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |