CopyMemory函数
来源:互联网 发布:小米笔记本软件模糊 编辑:程序博客网 时间:2024/05/17 02:37
CopyMemory函数
(1) VatPtr/ StrPtr/ ObjPtr
VarPtr:返回变量地址
StrPtr:返回真正的UNICODE字符串缓冲区的地址
ObjPtr:返回任何对象变量引用的地址
它们是VB提供给我们的好宝贝,它们是VBA函数库中的隐藏函数。为什么要隐藏?因为VB开发小组,不鼓励我们用指针嘛。
VarPtr返回的是变量所在处的内存地址,也可以说返回了指向变量内存位置的指针,它是我们在VB里处理指针最重要的武器之一。
Private Declare Function ObjPtr Lib "MSVBVM60" Alias "VarPtr" (var As Object) As Long
Private Declare Function VarPtr Lib "MSVBVM60" (var As Any) As Long
没有StrPtr,是因为VB对字符串处理方式有点不同,这方面的问题太多,
(2) ByVal和ByRef
ByVal传递的参数值,
ByRef传递的参数的地址。我们不用去区别传指针/传地址/传引用的不同,在VB里,它们根本就是一个东西的三种不同说法,即使VB的文档里也有地方在混用这些术语(但在C++里的确要区分指针和引用)
一定要搞清在里面的CopyMemory调用中,在什么地方要加ByVal,什么地方不加(不加ByVal就是使用VB缺省的ByRef),准确的理解传值和传地址(指针)的区别,是在VB里正确使用指针的基础。
(3)AddressOf
它用来得到一个指向VB函数入口地址的指针,不过这个指针只能传递给API使用,以使得API能回调VB函数。
(4)CopyMemory函数
功能是将从pSource指针所指处开始的长度为byteLen的内存拷贝到pDest所指的内存处。
例如:
Dim k As Long
k = 5
'从保存常数40000的临时变量处拷贝4个字节,到变量k所在的内存中。
CopyMemory ByVal VarPtr(k), 40000, 4 '[ByVal VarPtr(k)把K的地址本身当作值传给函数]
CopyMemory k , 40000, 4 'K传递函数的缺省方法是ByRef, 因此, 也可这样写
CopyMemory ByVal VarPtr(k), ByVal 40000, 4
‘意思是从地址40000拷贝4个字节到变量k所在的内存中。由于地址40000所在的内存未知或不能访问,结果错误
CopyMemory VarPtr(k), 40000, 4
意思就成了,从保存常数40000的临时变量处拷贝4个字节,由于缺省是ByRef,VarPtr(k)为K的地址,将会成为一临时变量,再得到此临时变量的地址,传递给函数。此临时变量的内存地址无任何意义,k的值并没有变。
(5)字符串变量CopyMemory
以ByVal形式传一个字符串变量给pSource,那么源地址就是字符串变量的值,也就是字符串缓冲区的地址。
Sub SwapPtr(sA As String, sB As String) Dim lTmp As Long CopyMemory lTmp, ByVal VarPtr(sA), 4 CopyMemory ByVal VarPtr(sA), ByVal VarPtr(sB), 4 CopyMemory ByVal VarPtr(sB), lTmp, 4 End Sub Sub SwapStrPtr2(sA As String, sB As String) Dim lTmp As Long Dim pTmp As Long, psA As Long, psB As Long pTmp = VarPtr(lTmp): psA = VarPtr(sA): psB = VarPtr(sB) CopyMemory pTmp, psA, 4 CopyMemory psA, psB, 4 CopyMemory psB, pTmp, 4 End Sub
Sub SwapStrPtr3(sA As String, sB As String) Dim lTmp As Long Dim pTmp As Long, psA As Long, psB As Long pTmp = StrPtr(sA): psA = VarPtr(sA): psB = VarPtr(sB) CopyMemory ByVal psA, ByVal psB, 4 CopyMemory ByVal psB, pTmp, 4 End Sub
- CopyMemory函数
- VB中CopyMemory函数
- CopyMemory
- CopyMemory
- CopyMemory
- 测试CopyMemory函数的速度
- C#里使用CopyMemory
- C#里使用CopyMemory
- CopyMemory、FillMemory、MoveMemory、ZeroMemory
- VB使用CopyMemory字符串处理
- CopyMemory memcpy产生的后果
- delphi CopyMemory、FillMemory、MoveMemory、ZeroMemory
- VB中利用CopyMemory使用指针
- VB用copymemory快速交换两个字符串
- VB中利用CopyMemory使用指针
- CopyMemory不同类型数据之间的复制
- VB中利用CopyMemory使用指针
- 网狐棋牌框架-CopyMemory问题
- 软件开发之在程序中时时获取logcat日志信息
- 【web开发学习笔记】Struts-Tags学习笔记1 - 通用标签和控制标签
- E - Counting Triangles
- CentoOS中打开txt文件中文乱码问题--一站式解决
- spring quartz定制器
- CopyMemory函数
- Genymotion-android 好用的模拟器工具
- 整理的免费教程:有关Android开发案例的视频教程
- 激励年轻人的30句话真言 读懂让你受用一生!送给年轻的你!
- python的 WSGI 简介
- Block编程值得注意的那些事儿
- 90后当家的人力资源管理互联网化
- 手机号校验
- 在Quartus II中使用JTAG模式固化程序到EPCS中的方法