這篇文章主要介紹了VB.NET指針怎么應用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
在陸豐等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供網站設計制作、網站建設 網站設計制作按需制作網站,公司網站建設,企業(yè)網站建設,品牌網站設計,網絡營銷推廣,外貿營銷網站建設,陸豐網站建設費用合理。
VB里使用指針不象C里那樣靈活,用指針處理數據時都需要用CopyMemory將數據在指針和VB能夠處理的變量之間來回拷貝,這需要很大的額外開銷。因此不是所有C里的指針操作都可以移值到VB里來,我們只應在需要的時候才在VB里使用指針。
1、VB.NET指針應用動態(tài)內存分配:完全不可能、可能但不可行,VB標準
在C和C++里頻繁使用指針的一個重要原因是需要使用動態(tài)內存分配,用Malloc或New來從堆棧里動態(tài)分配內存,并得到指向這個內存的指針。在VB里我們也可以自己用API來實現動態(tài)分配內存,并且實現象C里的指針鏈表。
但我們不可能象C那樣直接用指針來訪問這樣動態(tài)分配的內存,訪問時我們必須用CopyMemory將數據拷貝到VB的變量內,大量的使用這種技術必然會降低效率,以至于要象C那樣用指針來使用動態(tài)內存根本就沒有可行性。要象C、PASCAL那樣實現動態(tài)數據結構,在VB里還是應該老老實實用對象技術來實現。
本文配套代碼中的LinkedList里有完全用指針實現的鏈表,它是使用HeapAlloc從堆棧中動態(tài)分配內存,另有一個調用FindFirstUrlCacheEntry這個API來操作IE的Cache的小程序IECache,它使用了VirtualAlloc來動態(tài)分配內存。但實際上這都不是必須的,VB已經為我們提供了標準的動態(tài)內存分配的方法,那就是:對象、字符串和字節(jié)數組限于篇幅,關于對象的技術這里不講,LinkedList的源代碼里有用對象實現的鏈表,你可以參考。字符串可以用Space$函數來動態(tài)分配,VB的文檔里就有詳細的說明。關于字節(jié)數組,這里要講講,它非常有用。我們可用Redim來動態(tài)改變它的大小,并將指向它***個元素的指針傳給需要指針的API,如下:
dim ab() As Byte , ret As long '傳遞Null值API會返回它所需要的緩沖區(qū)的長度。 ret = SomeApiNeedsBuffer(vbNullString) '動態(tài)分配足夠大小的內存緩沖區(qū) ReDim ab(ret) As Byte '再次把指針傳給API,此時傳字節(jié)數組***個元素的指針。 SomeApiNeedsBuffer(ByVal VarPtr(ab(1)))
在本文配套程序中的IECache中,我也提供了用字節(jié)數組來實現動態(tài)分配緩沖區(qū)的版本,比用VirtualAlloc來實現更安全更簡單。
2、VB.NET指針應用突破限制
下面是一個突破VB類型檢查來實現特殊功能的經典應用,出自Bruce Mckinney的《HardCore Visual Basic》一書。
將一個Long長整數的低16位作為Interger型提取出來,
'標準的方法,也是高效的方法,但不容易理解。 Function LoWord(ByVal dw As Long) As Integer If dw And &H8000& Then LoWord = dw Or &HFFFF0000 Else LoWord = dw And &HFFFF& End If End Function '用指針來做效率雖不高,但思想清楚。 Function LoWord(ByVal dw As Long) As Integer CopyMemory ByVal VarPtr(LoWord), ByVal VarPtr(dw), 2 End Function
感謝你能夠認真閱讀完這篇文章,希望小編分享的“VB.NET指針怎么應用”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯,關注創(chuàng)新互聯行業(yè)資訊頻道,更多相關知識等著你來學習!
新聞名稱:VB.NET指針怎么應用
瀏覽地址:http://jinyejixie.com/article0/jjisio.html
成都網站建設公司_創(chuàng)新互聯,為您提供服務器托管、虛擬主機、外貿建站、網站維護、用戶體驗、定制開發(fā)
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯