日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
一見鐘情VB.NET指針

VB.NET有很多值得學(xué)習(xí)的地方,這里我們主要介紹VB.NET指針,包括介紹NET垃圾回收器等方面,欲知VB.NET如何。以下程序我們申請幾個指向不同類型的VB.NET指針:

創(chuàng)新互聯(lián)專注于山丹網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供山丹營銷型網(wǎng)站建設(shè),山丹網(wǎng)站制作、山丹網(wǎng)頁設(shè)計、山丹網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造山丹網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供山丹網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

 
 
 
  1. '使用(LayoutKind.Sequential)>屬性告訴net編譯器:結(jié)構(gòu)的元素在內(nèi)存中按其出現(xiàn)的順序排列  
  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字節(jié)數(shù)組指針  
  10. Dim tabytTest(3) As Byte  
  11. '以下語句告訴net垃圾回收進(jìn)程不對tabytTest進(jìn)行處理,也就是說tabytTest占用的內(nèi)存區(qū)域固定不變。  
  12. Dim thObject As GCHandleGCHandle = GCHandle.Alloc(tabytTest, GCHandleType.Pinned)  
  13. Dim tpObject As IntPtr = thObject.AddrOfPinnedObject() '取得指向字節(jié)數(shù)組的指針  
  14.  
  15. '取得一個指向32位內(nèi)存數(shù)據(jù)的指針,  
  16. '由于使用gchandle取指針的方法只能對引用的對象有效,  
  17. '所以對如int32等值類型必須使用將其封裝成為一個對象的方法以變?yōu)橐妙愋? 
  18. Dim ti32Test As Object = Convert.ToInt32(0)  
  19. '以下語句告訴net垃圾回收進(jìn)程不對ti32test進(jìn)行處理,也就是說ti32Test的內(nèi)存位置固定不變。  
  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. '由于結(jié)構(gòu)是一種值類型變量,為保證指針申請方便,我們申請  
  25. '取得一個和結(jié)構(gòu)tudtTest1大小一致的字節(jié)數(shù)組指針,只要空間占用長度和結(jié)構(gòu)一樣就可以了  
  26. '由于net在結(jié)構(gòu)封裝中會插入額外的數(shù)據(jù)位,所以一定要用sizeof方法得到結(jié)構(gòu)在非托管使用時的實際大小  
  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() '取得指向結(jié)構(gòu)的指針  
  30.  
  31. '在這兒你可以寫對指針處理的任意代碼(在例2中會給予補充)……  
  32.  
  33. '在使用完畢后一定要釋放指針指向的內(nèi)存塊,讓垃圾回收器可對這個內(nèi)存塊回收處理  
  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、定義一個具有合適內(nèi)存長度的引用變量(關(guān)于引用變量和值變量的差異可以參觀VB.NET的書籍)
2、使用GCHandle.Alloc方法將變量的內(nèi)存區(qū)域固定下來。
3、使用GCHandle對象的AddrOfPinnedObject取得該內(nèi)存區(qū)域的首地址并賦值給指針變量.
4、對指針進(jìn)行操作
5、使用GCHandle對象的free方法釋放指針指向的內(nèi)存區(qū)域以便NET垃圾回收器可以回收這個內(nèi)存空間
6、VB.NET指針?biāo)赶驍?shù)據(jù)的存取

在.NET中,對指針指向數(shù)據(jù)的存儲函數(shù)都封裝在marshal類中,主要的函數(shù)包括:Copy、PtrToStringUni 、PtrToStructure 、OffsetOf、WriteXXX,RreadXXX等,其中WriteXXX的表示向指針?biāo)硎镜牡刂分袑懭隭XX類型的數(shù)據(jù),而ReadXXX中作用就是將VB.NET指針?biāo)诘刂返臄?shù)據(jù)以XXX類型方式讀出。

【編輯推薦】

  1. 簡單描述VB.NET ProcessStartInfo對象
  2. VB.NET System.IO老鳥經(jīng)驗談
  3. 分析VB.NET創(chuàng)建類的具體操作過程
  4. 快速了解VB.NET垃圾收集器
  5. 對VB.NET OBEX協(xié)議的簡單概括

網(wǎng)頁名稱:一見鐘情VB.NET指針
鏈接分享:http://www.dlmjj.cn/article/dpeshho.html