温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

VB.NET指针有什么作用

发布时间:2021-06-17 16:55:46 来源:亿速云 阅读:155 作者:chen 栏目:编程语言

这篇文章主要介绍“VB.NET指针有什么作用”,在日常操作中,相信很多人在VB.NET指针有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”VB.NET指针有什么作用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

VB.NET有很多值得学习的地方,这里我们主要介绍VB.NET指针,包括介绍NET垃圾回收器等方面,欲知VB.NET如何。以下程序我们申请几个指向不同类型的VB.NET指针:

'使用<StructLayout(LayoutKind.Sequential)>属性告诉net编译器:结构的元素在内存中按其出现的顺序排列  <StructLayout(LayoutKind.Sequential)> _  Public Structure DEFUDT_Test  Public bytb As Byte  Public i32a As Int32  End Structure   Public Function fnGetIntptr1() As IntPtr  '取得一个4字节数组指针  Dim tabytTest(3) As Byte  '以下语句告诉net垃圾回收进程不对tabytTest进行处理,也就是说tabytTest占用的内存区域固定不变。  Dim thObject As GCHandleGCHandle = GCHandle.Alloc(tabytTest, GCHandleType.Pinned)  Dim tpObject As IntPtr = thObject.AddrOfPinnedObject() '取得指向字节数组的指针   '取得一个指向32位内存数据的指针,  '由于使用gchandle取指针的方法只能对引用的对象有效,  '所以对如int32等值类型必须使用将其封装成为一个对象的方法以变为引用类型  Dim ti32Test As Object = Convert.ToInt32(0)  '以下语句告诉net垃圾回收进程不对ti32test进行处理,也就是说ti32Test的内存位置固定不变。  Dim thObject1 As GCHandleGCHandle = GCHandle.Alloc(ti32Test, GCHandleType.Pinned)  Dim tpObject1 As IntPtr = thObject1.AddrOfPinnedObject() '取得ti32Test的首地址   Dim tudtTest1 As DEFUDT_Test  '由于结构是一种值类型变量,为保证指针申请方便,我们申请  '取得一个和结构tudtTest1大小一致的字节数组指针,只要空间占用长度和结构一样就可以了  '由于net在结构封装中会插入额外的数据位,所以一定要用sizeof方法得到结构在非托管使用时的实际大小  Dim tudtTest(Marshal.SizeOf(tudtTest1)) As Byte  Dim thObject2 As GCHandleGCHandle = GCHandle.Alloc(tudtTest, GCHandleType.Pinned)  Dim tpObject2 As IntPtr = thObject2.AddrOfPinnedObject() '取得指向结构的指针   '在这儿你可以写对指针处理的任意代码(在例2中会给予补充)……   '在使用完毕后一定要释放指针指向的内存块,让垃圾回收器可对这个内存块回收处理  If thObject.IsAllocated Then  thObject.Free()  End If  If thObject1.IsAllocated Then  thObject1.Free()  End If  If thObject2.IsAllocated Then  thObject2.Free()  End If  End Function

上例中VB.NET指针流程处理可以归纳为:
1、定义一个具有合适内存长度的引用变量(关于引用变量和值变量的差异可以参观VB.NET的书籍)
2、使用GCHandle.Alloc方法将变量的内存区域固定下来。
3、使用GCHandle对象的AddrOfPinnedObject取得该内存区域的首地址并赋值给指针变量.
4、对指针进行操作
5、使用GCHandle对象的free方法释放指针指向的内存区域以便NET垃圾回收器可以回收这个内存空间
6、VB.NET指针所指向数据的存取

在.NET中,对指针指向数据的存储函数都封装在marshal类中,主要的函数包括:Copy、PtrToStringUni 、PtrToStructure 、OffsetOf、WriteXXX,RreadXXX等,其中WriteXXX的表示向指针所表示的地址中写入XXX类型的数据,而ReadXXX中作用就是将VB.NET指针所在地址的数据以XXX类型方式读出。

到此,关于“VB.NET指针有什么作用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI