一个VB数组指针类

        顾名思义了,这个代码就是将指定的内存地址绑定到一个VB数组,即COM中的SafeArray上。所谓绑定,是指在使用该内存地址之前,并不需要申请相应的本地内存缓冲区,也不需要进行内存复制,只是根据该地址凭空构造一个VB数组,并将数组的真实数据地址指向该地址。当然,该类的功能完全可以用CopyMemory函数直接代替。为什么又写了这个类呢?主要还是为了进一步展示VB中数组的内幕,同时避免在进行大块内存操作时的内存复制,节省内存占用,加快运行速度。该类在VB进行内存搜索等方面的应用上有较好的性能表现。当然,在类中也使用了CopyMemory,但只用来构造数组而已,并没有作大量的数据调动。

好了,废话少好,言归正转,先建一个名为VbArrayPtr的类,代码如下: 

代码如下:

Option Explicit

'自定义的数组类型枚举
Public Enum vbArray_Type
    vbArrayByte = vbByte Or vbArray             '1Bytes
    vbArrayInteger = vbInteger Or vbArray       '2Bytes
    vbArrayLong = vbLong Or vbArray             '4Bytes
    vbArrayCurrency = vbCurrency Or vbArray     '8Bytes
End Enum

Private Type SAFEARRAYBOUND
    cElements As Long                           '这一维有多少个元素?
    lLbound As Long                             '它的索引从几开始?
End Type
Private Const MAX_DIMS = 0                      '数组最大维数为1维(下标为0)
Private Type SAFEARRAY                          '安全数组结构定义
    cDims As Integer                            '维数
    fFeatures As Integer                        '标志
    cbElements As Long                          '单个元素的字节数
    clocks As Long                              '锁定计数
    pvData As Long                              '指向数组元素的指针
    rgsabound(MAX_DIMS) As SAFEARRAYBOUND       '定义维数边界
End Type

Private Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (ptr() As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long

Private Const FADF_AUTO = &H1                   '

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值