您好,登錄后才能下訂單哦!
這篇文章主要介紹“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指針有什么作用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。