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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
全面攻略VB.NET指針應(yīng)用

經(jīng)過(guò)長(zhǎng)時(shí)間學(xué)習(xí)VB.NET,于是和大家分享一下VB.NET指針應(yīng)用,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。VB里使用指針不象C里那樣靈活,用指針處理數(shù)據(jù)時(shí)都需要用CopyMemory將數(shù)據(jù)在指針和VB能夠處理的變量之間來(lái)回拷貝,這需要很大的額外開(kāi)銷(xiāo)。因此不是所有C里的指針操作都可以移值到VB里來(lái),我們只應(yīng)在需要的時(shí)候才在VB里使用指針。

目前創(chuàng)新互聯(lián)建站已為上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、自貢網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

1、VB.NET指針應(yīng)用動(dòng)態(tài)內(nèi)存分配:完全不可能、可能但不可行,VB標(biāo)準(zhǔn)

在C和C++里頻繁使用指針的一個(gè)重要原因是需要使用動(dòng)態(tài)內(nèi)存分配,用Malloc或New來(lái)從堆棧里動(dòng)態(tài)分配內(nèi)存,并得到指向這個(gè)內(nèi)存的指針。在VB里我們也可以自己用API來(lái)實(shí)現(xiàn)動(dòng)態(tài)分配內(nèi)存,并且實(shí)現(xiàn)象C里的指針鏈表。

但我們不可能象C那樣直接用指針來(lái)訪問(wèn)這樣動(dòng)態(tài)分配的內(nèi)存,訪問(wèn)時(shí)我們必須用CopyMemory將數(shù)據(jù)拷貝到VB的變量?jī)?nèi),大量的使用這種技術(shù)必然會(huì)降低效率,以至于要象C那樣用指針來(lái)使用動(dòng)態(tài)內(nèi)存根本就沒(méi)有可行性。要象C、PASCAL那樣實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu),在VB里還是應(yīng)該老老實(shí)實(shí)用對(duì)象技術(shù)來(lái)實(shí)現(xiàn)。

#T#本文配套代碼中的LinkedList里有完全用指針實(shí)現(xiàn)的鏈表,它是使用HeapAlloc從堆棧中動(dòng)態(tài)分配內(nèi)存,另有一個(gè)調(diào)用FindFirstUrlCacheEntry這個(gè)API來(lái)操作IE的Cache的小程序IECache,它使用了VirtualAlloc來(lái)動(dòng)態(tài)分配內(nèi)存。但實(shí)際上這都不是必須的,VB已經(jīng)為我們提供了標(biāo)準(zhǔn)的動(dòng)態(tài)內(nèi)存分配的方法,那就是:對(duì)象、字符串和字節(jié)數(shù)組限于篇幅,關(guān)于對(duì)象的技術(shù)這里不講,LinkedList的源代碼里有用對(duì)象實(shí)現(xiàn)的鏈表,你可以參考。字符串可以用Space$函數(shù)來(lái)動(dòng)態(tài)分配,VB的文檔里就有詳細(xì)的說(shuō)明。關(guān)于字節(jié)數(shù)組,這里要講講,它非常有用。我們可用Redim來(lái)動(dòng)態(tài)改變它的大小,并將指向它***個(gè)元素的指針傳給需要指針的API,如下:

 
 
  1. dim ab() As Byte , ret As long  
  2. '傳遞Null值A(chǔ)PI會(huì)返回它所需要的緩沖區(qū)的長(zhǎng)度。  
  3. ret = SomeApiNeedsBuffer(vbNullString)  
  4. '動(dòng)態(tài)分配足夠大小的內(nèi)存緩沖區(qū)  
  5. ReDim ab(ret) As Byte  
  6. '再次把指針傳給API,此時(shí)傳字節(jié)數(shù)組***個(gè)元素的指針。  
  7. SomeApiNeedsBuffer(ByVal VarPtr(ab(1))) 

在本文配套程序中的IECache中,我也提供了用字節(jié)數(shù)組來(lái)實(shí)現(xiàn)動(dòng)態(tài)分配緩沖區(qū)的版本,比用VirtualAlloc來(lái)實(shí)現(xiàn)更安全更簡(jiǎn)單。

2、VB.NET指針應(yīng)用突破限制

下面是一個(gè)突破VB類(lèi)型檢查來(lái)實(shí)現(xiàn)特殊功能的經(jīng)典應(yīng)用,出自Bruce Mckinney的《HardCore Visual Basic》一書(shū)。

將一個(gè)Long長(zhǎng)整數(shù)的低16位作為Interger型提取出來(lái),

 
 
  1. '標(biāo)準(zhǔn)的方法,也是高效的方法,但不容易理解。  
  2. Function LoWord(ByVal dw As Long) As Integer  
  3. If dw And &H8000& Then  
  4. LoWord = dw Or &HFFFF0000  
  5. Else  
  6. LoWord = dw And &HFFFF&  
  7. End If  
  8. End Function  
  9.  
  10. '用指針來(lái)做效率雖不高,但思想清楚。  
  11. Function LoWord(ByVal dw As Long) As Integer  
  12. CopyMemory ByVal VarPtr(LoWord), ByVal VarPtr(dw), 2  
  13. End Function  

本文題目:全面攻略VB.NET指針應(yīng)用
當(dāng)前鏈接:http://www.dlmjj.cn/article/dpispoo.html