成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

全面攻略VB.NET指針應用

開發 后端
文章就VB.NET指針應用動態內存分配:完全不可能、可能但不可行,VB標準、突破限制兩方面做出詳細的介紹,希望對大家有幫助。

經過長時間學習VB.NET,于是和大家分享一下VB.NET指針應用,看完本文你肯定有不少收獲,希望本文能教會你更多東西。VB里使用指針不象C里那樣靈活,用指針處理數據時都需要用CopyMemory將數據在指針和VB能夠處理的變量之間來回拷貝,這需要很大的額外開銷。因此不是所有C里的指針操作都可以移值到VB里來,我們只應在需要的時候才在VB里使用指針。

1、VB.NET指針應用動態內存分配:完全不可能、可能但不可行,VB標準

在C和C++里頻繁使用指針的一個重要原因是需要使用動態內存分配,用Malloc或New來從堆棧里動態分配內存,并得到指向這個內存的指針。在VB里我們也可以自己用API來實現動態分配內存,并且實現象C里的指針鏈表。

但我們不可能象C那樣直接用指針來訪問這樣動態分配的內存,訪問時我們必須用CopyMemory將數據拷貝到VB的變量內,大量的使用這種技術必然會降低效率,以至于要象C那樣用指針來使用動態內存根本就沒有可行性。要象C、PASCAL那樣實現動態數據結構,在VB里還是應該老老實實用對象技術來實現。

#T#本文配套代碼中的LinkedList里有完全用指針實現的鏈表,它是使用HeapAlloc從堆棧中動態分配內存,另有一個調用FindFirstUrlCacheEntry這個API來操作IE的Cache的小程序IECache,它使用了VirtualAlloc來動態分配內存。但實際上這都不是必須的,VB已經為我們提供了標準的動態內存分配的方法,那就是:對象、字符串和字節數組限于篇幅,關于對象的技術這里不講,LinkedList的源代碼里有用對象實現的鏈表,你可以參考。字符串可以用Space$函數來動態分配,VB的文檔里就有詳細的說明。關于字節數組,這里要講講,它非常有用。我們可用Redim來動態改變它的大小,并將指向它***個元素的指針傳給需要指針的API,如下:

  1. dim ab() As Byte , ret As long  
  2. '傳遞Null值API會返回它所需要的緩沖區的長度。  
  3. ret = SomeApiNeedsBuffer(vbNullString)  
  4. '動態分配足夠大小的內存緩沖區  
  5. ReDim ab(ret) As Byte  
  6. '再次把指針傳給API,此時傳字節數組***個元素的指針。  
  7. SomeApiNeedsBuffer(ByVal VarPtr(ab(1))) 

在本文配套程序中的IECache中,我也提供了用字節數組來實現動態分配緩沖區的版本,比用VirtualAlloc來實現更安全更簡單。

2、VB.NET指針應用突破限制

下面是一個突破VB類型檢查來實現特殊功能的經典應用,出自Bruce Mckinney的《HardCore Visual Basic》一書。

將一個Long長整數的低16位作為Interger型提取出來,

  1. '標準的方法,也是高效的方法,但不容易理解。  
  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. '用指針來做效率雖不高,但思想清楚。  
  11. Function LoWord(ByVal dw As Long) As Integer  
  12. CopyMemory ByVal VarPtr(LoWord), ByVal VarPtr(dw), 2  
  13. End Function  
責任編輯:田樹 來源: 博客
相關推薦

2009-10-14 15:20:21

VB.NET窗體指針

2009-11-02 15:57:36

VB.NET WEB

2009-10-28 10:04:53

VB.NET XmlW

2009-10-28 17:44:31

VB.NET語言

2009-11-04 10:54:53

VB.NET MOVE

2009-10-29 15:16:02

VB.NET文件傳送

2009-10-15 10:57:16

VB.NET Text

2010-01-14 10:35:34

VB.NET指針

2009-11-02 14:48:45

VB.NET HOOK

2009-10-15 11:42:05

VB.Net賦值語句

2009-10-27 12:20:06

VB.NET多線程應用

2009-10-27 09:01:54

VB.NET內存指針

2009-10-27 09:45:03

VB.NET數組

2009-10-15 17:50:48

VB.NET調用API

2010-01-12 16:20:44

VB.NET類

2009-10-09 15:59:41

VB.NET對象

2009-10-20 17:38:20

VB.NET exce

2009-11-10 16:20:25

VB.NET全局熱鍵

2009-10-29 11:26:28

VB.NET調用Web

2009-11-10 16:27:45

VB.NET指針
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 视频在线日韩 | 久久综合国产 | 国产成人小视频 | 亚洲综合大片69999 | www.婷婷亚洲基地 | 色中文在线 | 激情av | 国产精品久久久久久久久久久久午夜片 | 免费观看日韩精品 | 成人午夜激情 | 在线看国产 | 韩日精品一区 | 欧美成年黄网站色视频 | 成人精品一区二区三区 | 日韩成人精品一区 | 成人免费在线电影 | 一区二区三区四区毛片 | 精品视频国产 | 欧美精品一区二区在线观看 | 日日夜夜草| 日韩国产一区二区三区 | 亚洲一区二区综合 | 国产99久久久国产精品 | 国产一级视频在线播放 | 欧美精品在线一区二区三区 | 91精品国产手机 | 欧美福利| 亚洲一区 | 成人不卡 | 国产成人精品一区二区三区网站观看 | 69堂永久69tangcom | 免费黄色的视频 | 日韩成人影院 | 久久久资源 | 欧洲尺码日本国产精品 | 国产成人一区二区三区 | 91精品国产综合久久精品 | 欧美日韩高清 | 亚洲一区综合 | 中文字幕一区二区三区不卡 | 欧美日韩国产精品激情在线播放 |