| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1296 人关注过本帖
标题:VB指针教程1
只看楼主 加入收藏
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
结帖率:78.95%
收藏
 问题点数:0 回复次数:6 
VB指针教程1
工程完整代码:
Demo1.rar (2.11 KB)

程序代码:
'先理解下变量的地址与指向这个地址的值。xx省xx市xx街xx号就是一个地址,
'指向这个地址的值就是这个地址就有什么。比如这个地址是张三家的地址,
'张三的家有什么呢?这个有什么就是这个地址所指向的值。
'VB没用操作指针的语言特性,因此需要通过WinAPI函数来进行操作,下面我们将
'演示一个非常简单的指针操作,让大家在VB使用指针有个基本的了解。
'CopyMemory函数参数
'CopyMemory是WinAPI函数,为了演示我把其修改成了两个版本,
'版本1:CopyMemory1
'版本2:CopyMemory2
'版本1Destination及Source的参数是按照引用传递的(ByRef)
'版本2Destination及Source的参数是按照值传递的(ByVal)
'参数说明:
'Destination
'要复制内存块的目的地址?
'Source
'要复制内存块的源地址?
'Length
'指定要复制内存块的大小,单位为字节
'返回值
'该函数为VOID型,没有返回值。
Private Declare Sub CopyMemory1 Lib "kernel32" Alias "RtlMoveMemory" _
        (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Private Declare Sub CopyMemory2 Lib "kernel32" Alias "RtlMoveMemory" _
        (ByVal Destination As Any, ByVal Source As Any, ByVal Length As Long)

'在Basic语言演变成QBasic,然后到Visual Basic之前,VarPtr函数就已经存在了。
'开始,这个函数存在于VB运行库1.0版中。VarPtr函数的作用获取变量的地址
Private Sub Form_Click()
    Dim long1 As Long
    Dim long2 As Long
    long1 = 10
    '版本1的CopyMemory
    CopyMemory1 long2, long1, 4
    MsgBox long2
    '版本2的CopyMemory
    Dim long3 As Long
    CopyMemory2 VarPtr(long3), VarPtr(long1), 4
    MsgBox long3
End Sub


[ 本帖最后由 ioriliao 于 2010-5-2 13:56 编辑 ]
搜索更多相关主题的帖子: 指针 教程 
2010-05-02 13:07
nbaqqqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:202
专家分:137
注 册:2009-11-6
收藏
得分:0 
没看懂, CopyMemory1 long2, long1, 4中的long2, long1是变量还是地址?按函数的声明看像地址,可msg(long2)怎么会是10,long2没初值应该是0的啊。这个函数不是把地址中的数据复制吗,怎么把地址给改了。


[ 本帖最后由 nbaqqqq 于 2010-5-2 13:42 编辑 ]
2010-05-02 13:37
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
回复 2楼 nbaqqqq
是地址,因为版本1的目标地址与源地址参数是以引用传递的(byref),就是说byref修饰的参数,传递的是这个参数变量的地址。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-05-02 13:44
nbaqqqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:202
专家分:137
注 册:2009-11-6
收藏
得分:0 
回复 3楼 ioriliao
哦,明白了,谢谢。
2010-05-02 13:52
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
回复 2楼 nbaqqqq
先理解下变量的地址与指向这个地址的值。
xx省xx市xx街xx号就是一个地址,指向这个地址的值就是这个地址就有什么。
比如这个地址是张三家的地址,张三的家有什么呢?这个有什么就是这个地址所指向的值。
CopyMemory1函数参数传递的是变量的地址,然后把源地址指向的值复制到目标地址。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-05-02 13:52
nbaqqqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:202
专家分:137
注 册:2009-11-6
收藏
得分:0 
李四家有8个西瓜(李四家地址指向8个西瓜)       CopyMemory1 张三家地址, 李四家地址, 4   后 ,张三家里也有了四个西瓜(张三家地址指向了李四家其中的4个西瓜)   可不可以这样理解?而我刚才不理解CopyMemory1 张三家, 李四家, 4是以(byref)传递的,其实就是CopyMemory1 张三家地址, 李四家地址, 4
2010-05-02 14:14
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
回复 6楼 nbaqqqq
可以这么理解

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-05-02 15:21
快速回复:VB指针教程1
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027731 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved