六、Copymemory函数
1. 我搜了一下讲解这个函数的帖子,发现对这个函数的声明大体有两种:
A: Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)
B: Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(ByVal Destination As Long, ByVal Source As Long,ByVal Length As Long)
虽然使用B有其理由,但为避免混乱,这里使用A的声明方式,初学者只需把A声明拷贝到模块开头就可以使用Copymemory函数了,其他不必深究。
2. 其实这个函数本身非常简单:
Copymemory 参数2, 参数1, a
记住:参数1 ,参数2 都是内存一块区域开头的地址,这个函数的意思是:把从参数1开头的地址,往后数a长度这么大的区域,复制到参数2开头的区域中。
3. 见下图:这个函数无非是把0015F7C0(参数1)开头的区域,红框1处的内容,复制到以0015F7C4(参数2)开头的区域,即红框2处, 这里第3个参数为4,意即复制四个字节的内容。
复制前
复制后
大家需要明白的两点是:
①既然参数1,参数2是内存的地址,而内存的地址是用一个长整形数表示的,所以,参数1,参数2都是long数据类型的。
②这个函数的2个参数,参数1、参数2必须传址(byref),不能传值(byval),除非这个值本身是一个内存地址。
到此为止,大家可以看到,这个函数本身是很简单的,也容易理解。
问题在于如何取得首位地址,待续……