vb中copymemory如何用_vb中lcase函数

vb中copymemory如何用_vb中lcase函数vb中copymemory函数的使用挺耐人寻味的。copymemory的使用说明资料书上就一句“该函数用于将一块内存的数据从一个位置复制到另一个位置”。其参数数据类型destinationasany,sourceasany。尽管是any型可理解成任一类型但是我看很多地方都说参数是指针类型的。因此起初我很不解,既然是指针型的参数我们往往直接将变量传递过去而不是变量的地址传递过去不是非法的吗?

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

vb中copymemory函数的使用挺耐人寻味的。copymemory的使用说明资料书上就一句“该函数用于将一块内存的数据从一个位置复制到另一个位置”。其参数数据类型destination as any,source as any。尽管是any型可理解成任一类型但是我看很多地方都说参数是指针类型的。因此起初我很不解,既然是指针型的参数我们往往直接将变量传递过去而不是变量的地址传递过去不是非法的吗?其实copymemory使用的灵活度是很大的,还是开始给出的定义最有说明性,将一块内存的数据从一个位置复制到另一个位置就是最好的解释。看下面几段程序有助于我们更好理解。
程序一:Private Declare Sub CopyMemory Lib “kernel32” Alias “RtlMoveMemory” (Destination As Any, Source As Any, ByVal Length As Long)
Private Sub Command1_Click()

Dim str1 As String

Dim str2 As String

str2 = “hello world”

CopyMemory str1, str2, 4

Text1.Text = str1

End Sub

这是候调试结果text1显示的内容完全就是str2复制过去的内容,即hello world。
如果改一句“copymemory str1,strptr(str2),4″,这时候传递的是str2的指针,那么text1显示的结果就是h。
怎么样去理解?strptr(str2)得到的是一个指针毋庸置疑,即使函数参数是any型的因此该参数是合法的没问题,那么传递给str1,str1开始申明的是一个string型的变量,而不是一个string型的指针变量,因此传递参数的类型不一致为什么也是合法的,而且最终得到一个结果h。于是我上网找了vb中关于指针变量的定义,大家都说vb没有直接定义指针的。因此我想是不是str1放在copymemory中做参数接受指针变量的时候已经被强制转变成指针型变量了。
程序二:Private Declare Sub CopyMemory Lib “kernel32” Alias “RtlMoveMemory” (Destination As Any, Source As Any, ByVal Length As Long)
Private Sub Form_Load()

Dim i As Long

Dim k As Long

k = 5

i = VarPtr(k)

Debug.Print i
Debug.Print VarPtr(i)

CopyMemory i, 40000, 4

Debug.Print VarPtr(i)

Debug.Print i

Debug.Print k

Debug.Print “*******”

End Sub
调试结果:

 
1243232
1243236

 
1243236

 
40000

 
5

*******
说明变量i,k的地址是1243232,1243236。这一句:CopyMemory i, 40000, 4就是直接给变量i赋值40000而不是把地址值40000赋过去将变量i的地址改变成40000。如果想通过指针的方式修改k的初始值的话。
可以用下面这几句:
Dim i As Long

Dim k As Long

k = 5

i = VarPtr(k)

CopyMemory ByVal i, 40000, 4

Debug.Print k

Debug.Print “*******”
这时候就会发现k的值已经被修改成40000了。怎么样去理解?i 的值由i=varptr(k)一句变成k的地址值了,这时候用byval i表示的是该地址指向的内容,修改成40000后也就是k值被修改了。
VB中由于没有明确的指针定义,涉及到指针操作是通过API函数copymemory来进行,相对于C等语言来说形式上没有那么严格要求,因此外形上看很不明晰。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/219212.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • UML图:活动图详细介绍

    UML图:活动图详细介绍活动图简介什么是活动图(ActivityDiagram)活动图是UML用于对系统的动态行为建模的另一种常用工具,它描述活动的顺序,展现从一个活动到另一个活动的控制流,活动图在本质上是一种流程图;活动图着重表现从一个活动到另一个活动的控制流活动图元素动作状态(ActionState)动作状态是指原子的,不可中断的动作,并在此动作完成后通过完成转换转向另一个状态在UML中的动作状态图用平滑的圆角矩形表示动作状态的特点动作状态是原子的,无法分解为更小的部分动作状态是不可中断的,一旦开始

  • 如何在Windows下开发Python:在cmd下运行Python脚本+如何使用Python Shell(command line模式和GUI模式)+如何使用Python IDE

    如何在Windows下开发Python:在cmd下运行Python脚本+如何使用Python Shell(command line模式和GUI模式)+如何使用Python IDEhttp://www.crifan.com/how_to_do_python_development_under_windows_environment/本文目的希望对于,如何在Windows下,写P

  • CentOS8快速部署轻量级自动化运维平台Spug

    CentOS8快速部署轻量级自动化运维平台SpugSpug面向中小型企业设计的轻量级无Agent的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、文件在线上传下载、应用发布部署、在线任务计划、配置中心、监控、报警等一系列功能。Spug的特性批量执行:主机命令在线批量执行在线终端:主机支持浏览器在线终端登录文件管理:主机文件在线上传下载任务计划:灵活的在线任务计划发布部署:支持自定义发布部署流程配置中心:支持KV、文本、json等格式的配置监控中心:支持站点、端口、进程、自定义等监控报警中心:支持短信、

  • 使用npm安装依赖,尽量别使用cnpm,会漏掉很多依赖的

    使用npm安装依赖,尽量别使用cnpm,会漏掉很多依赖的

    2021年10月11日
  • JavaScript getElementById()方法介绍

    JavaScript getElementById()方法介绍getElementById()根据元素的id属性获取一个元素节点对象getElementById()可以根据元素的id属性获取一个元素节点对象,该方法所有浏览器均可使用返回带有指定ID的元素,如下图:我们可以通过innerHTML属性(获取或者设置元素的内容(包含HTML标签解析)),如下图:我们可以通过innerText属性(获取或者设置元素的内容…

  • SAGA GIS_GOSAT卫星数据下载

    SAGA GIS_GOSAT卫星数据下载官网:SAGA-SystemforAutomatedGeoscientificAnalyseshttps://saga-gis.sourceforge.io/en/index.html点击下载按钮点击后等几秒即可下载下载时间过长

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号