如何在Visual Basic 中取得变量在内存中的地址(Address of Variables)

原创 2001年11月29日 14:51:00

如何在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文件建立一个VB5VB6的类型库(.TLB

MIDL /t VB6ptrlib.odl

MIDL /t VB5ptrlib.odl


为了使用VarPtrStringArray你需要引用这个类型库


例子:

 

ObjPtr

ObjPtr返回一个object变量的地址

 

 

 

VB 取地址函数大全

Public Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Var() As Any) As LongPublic D...
  • sxqvb
  • sxqvb
  • 2009年11月11日 16:23
  • 954

VB真是想不到系列之四:VB指针葵花宝典之SafeArray

本系列文章可见:    http://www.csdn.net/develop/list_article.asp?author=AdamBear               VB真是想不到系列之四:V...
  • AdamBear
  • AdamBear
  • 2002年03月18日 19:02
  • 4806

如何判断数组是否已初始化,定义了维数

如何判断数组是否已初始化,定义了维数  最近用Split("",",")函数,遇到如何简明判断数组是否初始化问题,找到了一些方法,只有方法一最简单,记之。 方法一:使用cstr(J...
  • whchensir
  • whchensir
  • 2015年07月11日 02:31
  • 1244

使用 Visual Basic 通过 32 位 地址访问内存(中英对照)

使用 Visual Basic 通过 32 位 地址访问内存2001年7月6日马尼拉,菲律宾作者:Chris Vega [gwapo@models.com]  当我们谈论“真的”指针和内存地址,我们大...
  • pzhan
  • pzhan
  • 2007年02月16日 21:24
  • 773

如何在Visual Basic 中取得变量在内存中的地址(Address of Variables)

如何在Visual Basic 中取得变量的内存地址(Address of Variables)本文适用于Microsoft Visual Basic Learning Edition for Win...
  • coolstar
  • coolstar
  • 2001年11月29日 14:51
  • 2909

DIBSection Class VB

  • 2008年03月18日 03:53
  • 5KB
  • 下载

如何在Visual Basic 中取得变量在内存中的地址(Address of Variables)

如何在Visual Basic 中取得变量的内存地址(Address of Variables)本文适用于Microsoft Visual Basic Learning Edition for Win...
  • hejishan
  • hejishan
  • 2008年01月03日 14:55
  • 410

如何在Visual Basic 中取得变量在内存中的地址(Addre

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 05:35
  • 167

More Faster , More VB User

More Faster , More VB User                                        ——VB位操作 为什么VB中不加入位操作的语法元素,我想主要是比尔的...
  • BlueDog
  • BlueDog
  • 2004年12月23日 23:32
  • 1992

vb 指针的操作

VB指针教程1 '先理解下变量的地址与指向这个地址的值。xx省xx市xx街xx号就是一个地址, '指向这个地址的值就是这个地址就有什么。比如这个地址是张三家的地址, '张三的家有什么呢?...
  • tangyanzhi1111
  • tangyanzhi1111
  • 2016年08月10日 16:37
  • 767
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何在Visual Basic 中取得变量在内存中的地址(Address of Variables)
举报原因:
原因补充:

(最多只允许输入30个字)