91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

VB.NET指針有什么作用

發布時間:2021-06-17 16:55:46 來源:億速云 閱讀:283 作者: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

海林市| 浑源县| 六安市| 武汉市| 鄂伦春自治旗| 江华| 沽源县| 湖南省| 泉州市| 丰顺县| 郴州市| 威远县| 安义县| 通山县| 五河县| 二连浩特市| 綦江县| 万山特区| 象州县| 昌乐县| 闽侯县| 双柏县| 无为县| 麻城市| 银川市| 遵化市| 淮北市| 华容县| 乐至县| 楚雄市| 乌苏市| 三河市| 阜阳市| 龙井市| 万源市| 高州市| 金堂县| 新宁县| 临江市| 肃宁县| 凯里市|