欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

vb.net有指針嗎,vb 函數(shù)指針

請問VB.net 里面有指針么 ? 如果有可以舉例說明下么

System.Runtime.InteropServices命名空間的

成都網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設計、重慶網(wǎng)站建設公司、微信開發(fā)、小程序制作、集團企業(yè)網(wǎng)站設計等服務項目。核心團隊均擁有互聯(lián)網(wǎng)行業(yè)多年經驗,服務眾多知名企業(yè)客戶;涵蓋的客戶類型包括:成都輕質隔墻板等眾多領域,積累了大量豐富的經驗,同時也獲得了客戶的一致稱譽!

Marshal函數(shù)可以使用

Marshal.Copy(index, bGuid, 0, 16) '讀取指針數(shù)據(jù)到數(shù)組

用最簡單的代碼介紹一下指針在VB.net里面的用法?

例1:以下程序我們申請幾個指向不同類型的指針:

’使用StructLayout(LayoutKind.Sequential)屬性告訴net編譯器:結構的元素在內存中按其出現(xiàn)的順序排列

StructLayout(LayoutKind.Sequential) _

Public Structure DEFUDT_Test

Public bytb As Byte

Public i32a As Int32

End Structure

Public Function fnGetIntptr1() As IntPtr

’取得一個4字節(jié)數(shù)組指針

Dim tabytTest(3) As Byte

’以下語句告訴net垃圾回收進程不對tabytTest進行處理,也就是說tabytTest占用的內存區(qū)域固定不變。

Dim thObject As GCHandle = GCHandle.Alloc(tabytTest, GCHandleType.Pinned)

Dim tpObject As IntPtr = thObject.AddrOfPinnedObject() ’取得指向字節(jié)數(shù)組的指針

’取得一個指向32位內存數(shù)據(jù)的指針,

’由于使用gchandle取指針的方法只能對引用的對象有效,

’所以對如int32等值類型必須使用將其封裝成為一個對象的方法以變?yōu)橐妙愋?/p>

Dim ti32Test As Object = Convert.ToInt32(0)

’以下語句告訴net垃圾回收進程不對ti32test進行處理,也就是說ti32Test的內存位置固定不變。

Dim thObject1 As GCHandle = GCHandle.Alloc(ti32Test, GCHandleType.Pinned)

Dim tpObject1 As IntPtr = thObject1.AddrOfPinnedObject() ’取得ti32Test的首地址

Dim tudtTest1 As DEFUDT_Test

’由于結構是一種值類型變量,為保證指針申請方便,我們申請

’取得一個和結構tudtTest1大小一致的字節(jié)數(shù)組指針,只要空間占用長度和結構一樣就可以了

’由于net在結構封裝中會插入額外的數(shù)據(jù)位,所以一定要用sizeof方法得到結構在非托管使用時的實際大小

Dim tudtTest(Marshal.SizeOf(tudtTest1)) As Byte

Dim thObject2 As GCHandle = 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

上例中指針流程處理可以歸納為:

1、 定義一個具有合適內存長度的引用變量(關于引用變量和值變量的差異可以參觀VB.NET的書籍)

2、使用GCHandle.Alloc方法將變量的內存區(qū)域固定下來。

3、使用GCHandle對象的AddrOfPinnedObject取得該內存區(qū)域的首地址并賦值給指針變量.

4、對指針進行操作

5、使用GCHandle對象的free方法釋放指針指向的內存區(qū)域以便net垃圾回收器可以回收這個內存空間

2、指針所指向數(shù)據(jù)的存取

在.net中,對指針指向數(shù)據(jù)的存儲函數(shù)都封裝在marshal類中,主要的函數(shù)包括:Copy、PtrToStringUni 、PtrToStructure 、OffsetOf、WriteXXX,RreadXXX等,其中WriteXXX的表示向指針所表示的地址中寫入XXX類型的數(shù)據(jù),而ReadXXX中作用就是將指針所在地址的數(shù)據(jù)以XXX類型方式讀出。看例程2,我們使用這些方法演示對例1那幾個指向不同類型數(shù)據(jù)的指針作數(shù)據(jù)存/取操作。

例2:演示向例1申請得到的幾個指針執(zhí)行寫入及讀取數(shù)據(jù)的操作.

Marshal.WriteInt32(tpObject1, 0, Convert.ToInt32(77)) ’向ti32Test變量指向的地址寫入32位整數(shù)77

MsgBox("現(xiàn)在ti32Test的值為:" ti32Test) ’因為變量存儲地址的數(shù)據(jù)已改為77,所以顯示為77

’以下這句之所以可行,因為ti32Test是32位整數(shù),而tpObject指向的tabytTest數(shù)組剛好有4個元素

’而每一個byte元素都占用8位,合起來就是32位,和ti32Test占用的空間一樣。這就印證了前面提’

’到的net中指針沒有指向類型的說明。

Marshal.WriteInt32(tpObject, 0, ti32Test)

’以下代碼再將tabytTest字節(jié)數(shù)組的內容理解為一個int32整數(shù),

’并將值賦值給tudtTest結構中的int32元素

’我們使用Marshal.OffsetOf(GetType(DEFUDT_Test), "i32a").ToInt32以取得i32a元素在結構中的內存偏移位置

’所以New IntPtr(tpObject2.ToInt32 + Marshal.OffsetOf(GetType(DEFUDT_Test), "i32a").ToInt32)就臨時產生了

’一個指針并指向i32a所在的內存地址(, 這個方法也說明了指針可以以字節(jié)為單位進行加減計算以指向合適的變量。

’Marshal.ReadInt32的作用是從指針中讀取一個32整數(shù)。

Marshal.WriteInt32(New IntPtr(tpObject2.ToInt32 + Marshal.OffsetOf(GetType(DEFUDT_Test), "i32a").ToInt32), _

0, Marshal.ReadInt32(tpObject))

’這兒可以將字節(jié)數(shù)組的內容復制到真正的結構中

MsgBox(Marshal.OffsetOf(tudtTest1.GetType, "i32a").ToInt32)

tudtTest1 = CType(Marshal.PtrToStructure(tpObject2, GetType(DEFUDT_Test)), DEFUDT_Test)

MsgBox("結構tidtTest1中i32a元素的值為:" tudtTest1.i32a) ’此處將顯示剛賦的值77

vb.net 沒有指針 用什么代替c# Byte* aa;

指針是非強類型化的,當使用一個指針的時候,指向的不是一個特定的類型,而僅僅是一塊內存區(qū)。對這個指針進行位移操作,然后向此位置寫入,就可能破壞內存,因此稱可以直接操作內存的代碼為不安全的(unsafe)。 平時我們使用C#,是在托管平臺上...

VB.NET 函數(shù)的返回值

C返回局部變量的值也沒問題啊

只是如果這個局部變量是指向棧上的內存的指針,由于函數(shù)結束后活動棧被清空,會導致指針失效。

VB.NET不支持指針語法,它不可能返回指向棧上的指針,所以用不著擔心這個問題。

你的理解

第一點理解是正確的,不過和這個問題關系不大。因為引用類型本來就不是分配在棧上的,它當然就不受函數(shù)的影響。

第二點,那個只是個語法問題。VB6沒有Return語句,所以它必然有另外一種語法來表明函數(shù)的返回值。這個和函數(shù)能否返回正確的對象沒有關系,就是一種表明函數(shù)返回值的語法。

編譯器確實定義了一個和函數(shù)同名的變量,那個變量就是一個普通的局部變量,作用域就在函數(shù)的局部域里。這個變量沒什么特別的,就是編譯器會在函數(shù)結束時把這個變量的值作為函數(shù)的返回值返回而已。

vb.net 怎樣定義指針?指針之間怎樣轉換?急!!!

Imports System.Runtime.InteropServices

ByVal AesKey() As Byte

Dim AesKeyObj As GCHandle = GCHandle.Alloc(AesKey, GCHandleType.Pinned)

Dim AesKeyPtr As IntPtr = AesKeyObj.AddrOfPinnedObject

'AesKeyPtr 就是AesKey的指針

If AesKeyObj.IsAllocated Then AesKeyObj.Free()

分享文章:vb.net有指針嗎,vb 函數(shù)指針
標題鏈接:http://chinadenli.net/article44/hecdhe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供電子商務網(wǎng)站排名網(wǎng)站導航面包屑導航企業(yè)建站動態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網(wǎng)站制作