如何在Visual Basic 中取得变量的内存地址(Address of Variables)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> |
本文适用于
- Microsoft Visual Basic Learning Edition for Windows, versions 5.0, 6.0
- Microsoft Visual Basic Professional Edition for Windows, versions 5.0, 6.0
- Microsoft Visual Basic Enterprise Edition for Windows, versions 5.0, 6.0
摘要
很少有vb程序员需要获得一个变量的低级信息,例如内存地址。然而,一些API函数需要这种
信息,本文描述的方法可以帮助VB程序员取得这些信息
VarPtr - Returns the address of a variable.返回变量的地址
VarPtrArray - Returns the address of an array.返回数组地址
StrPtr - Returns the address of the UNICODE string buffer.返回UNICODE字符串缓冲区地址
VarPtrStringArray - Returns the address of an array of strings.
返回字符串数组地址
ObjPtr - Returns the pointer to the interface referenced by an object variable. 返回一个对象的接口引用指针
正文
VarPtr
局限:这个函数不能用于取得数组的地址
VarPtrArray
Dim lngSafeArrayAddress as Long
局限:VarPtrArray函数不能用于取得一个字符串数组的地址,因为vb会对字符串进行UNICODE/ANSI转换,如果对字符串数组使用VarPtrArray,将会得到一个临时ANSI数组拷贝的地址。
StrPtr
取得字符串第一个字符的地址Dim lngCharAddress as Long
当你在API调用中需要传递一个UNICODE字符串指针时可以使用这个函数
VarPtrStringArray
VarPtrStringArray用于取得字符串数组的地址。为了避免VB 进行UNICODE/ANSI转换,
它的声明必须在类型库中定义
你也可以使用midl编译器将下面的.odl文件编译成你自己的类型库 :)如果是
Visual Basic 5.0,建立一个文本文件名为VB6ptrlib.odl,内容如下:
如果是
Visual Basic 5.0,建立一个文本文件名为VB5ptrlib.odl,内容如下:
在命令行使用MIDL编译器编译.ODL文件建立一个VB5或VB6的类型库(.TLB)
MIDL /t VB6ptrlib.odl
MIDL /t VB5ptrlib.odl
为了使用VarPtrStringArray你需要引用这个类型库
例子:
ObjPtr
ObjPtr返回一个object变量的地址