189 8069 5689

一见钟情VB.NET指针

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

创新互联专注于山丹网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供山丹营销型网站建设,山丹网站制作、山丹网页设计、山丹网站官网定制、小程序开发服务,打造山丹网络公司原创品牌,更为您提供山丹网站排名全网营销落地服务。

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

【编辑推荐】

  1. 简单描述VB.NET ProcessStartInfo对象
  2. VB.NET System.IO老鸟经验谈
  3. 分析VB.NET创建类的具体操作过程
  4. 快速了解VB.NET垃圾收集器
  5. 对VB.NET OBEX协议的简单概括

本文名称:一见钟情VB.NET指针
网页地址:http://www.cdxtjz.cn/article/dpeshho.html

联系我们

您好HELLO!
感谢您来到成都网站建设公司,若您有合作意向,请您为我们留言或使用以下方式联系我们, 我们将尽快给你回复,并为您提供真诚的设计服务,谢谢。
  • 电话:028- 86922220 18980695689
  • 商务合作邮箱:631063699@qq.com
  • 合作QQ: 532337155
  • 成都网站设计地址:成都市青羊区锣锅巷31号五金站写字楼6楼

小谭建站工作室

成都小谭网站建设公司拥有多年以上互联网从业经验的团队,始终保持务实的风格,以"帮助客户成功"为已任,专注于提供对客户有价值的服务。 我们已为众企业及上市公司提供专业的网站建设服务。我们不只是一家网站建设的网络公司;我们对营销、技术、管理都有自己独特见解,小谭建站采取“创意+综合+营销”一体化的方式为您提供更专业的服务!

小谭观点

相对传统的成都网站建设公司而言,小谭是互联网中的网站品牌策划,我们精于企业品牌与互联网相结合的整体战略服务。
我们始终认为,网站必须注入企业基因,真正使网站成为企业vi的一部分,让整个网站品牌策划体系变的深入而持久。