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

VB.NET指針在實際應用中作用體現

開發 后端
要想徹底掌握VB.NET指針的使用技巧,首先就需要我們獲取數組的指針,然后還要清楚怎樣才能將指針所指向的數組取出來。

有些語言比如C語言中,存在有指針。很多人在學習編程語言的時候,碰到指針的問題都是非常頭疼的。那么VB.NET指針又會呈現出一個什么樣的情況呢?我們是不是可以很方便的的使用這一操作呢?#t#

一、為什么要使用VB.NET指針:

C/C++中都可以操作指針,用指針可以很方便的訪問到內存區域,C++中的指針其實就是數組的一個訪問方式而已,由于其使用比較方便,可以非常方便的進行對內存區域的賦值與讀取操作,因此,用慣了C++的程序員樂此不疲。

其實,我們在用VB開發一般程序的時候是沒有必要用指針去訪問內存某區域的。因為VB為我們提供了一個非常方便的訪問方法——就是VB的數組。用數組可以很方便的使用一組數據。然而,為什么,在VB中我們非要去實現指針的操作呢?

1、數據操作速度的需求

比如,需要針對兩個數組之間的復制操作,需要給數組做一個循環,然后在逐個的添加到新的數組中,用指針的方法速度會快很多。

2、在對系統庫函數的調用時

Windows中的User32.dll\GDI32.dll\Kernel32.dll等這些系統庫函數中,很多都是接收指針參數的,因此,如果VB需要調用這些函數的時候,就必須要進行指針的傳參。

二、VB.NET指針怎么用

要想弄明白VB怎么使用指針,就必須要弄明白兩件事,第一,如何取得數組的指針,第二,如何將指針所指向的數組取出來。

A、在講解這兩個問題之前,我們需要了解幾個問題:

1、VB的數組與C++的數組的區別

有可能,大家現在認為VB的數組和C++的數組沒有任何區別,都是內存中的一段地址而已,其實不然。

C++中是真的數組,真的是一段地址,而且,當你的指針訪問超出了數組的范圍,也沒人理你,只是很容易導致系統崩潰而已。

而VB數組其實是一個結構體,在這個結構體中包含了關于這個數組的描述信息,其結構類似如下:

Private Type VB數組 數組維數 數組大小 真實的數組 End Type 2、Copymemory系統函數

這個函數有點像Java中的ArrayCopy函數,就是將兩段內存空間進行復制操作。它的聲明是這樣的:

 

  1. Public Declare Sub CopyMemory Lib 
    "kernel32" Alias "RtlMoveMemory" 
    (Destination As Any, Source As 
    Any, ByVal Length As Long)
     函數原型   
  2. VOID CopyMemory(  
  3. PVOID Destination,   
  4. CONST VOID *Source,   
  5. DWORD Length   
  6. ); 

 

第一個參數:目的地址指針

第二個參數:源地址指針

第三個參數:復制的大小

請注意,在CopyMemory的VB聲明中,傳遞的源與目的是Any類型,也就是說可以是任何類型的變量。

B、如何用VB指針

1、如何取得數組的指針

請看如下程序:

  1. pOutputArray As Long 
    outputArray()   
  2. As Byte ReDim 
    outputArray(100)   
  3. As Byte pOutputArray =
     
    VarPtr(outputArray(0)) 

說明:

我們聲明了一個Byte數組outputArray,用VarPtr函數,取出數組的指針賦給了Long型變量pOutputArray。

2、如何將指針所指向的數組取出來

請看如下程序:

 

  1. CopyMemory ByVal pOutputArray, 
    ByVal pData, UBound(outputArray) 

說明:

pData是一個內存塊的指針,通過這句話的執行,我們得到了pData指向的內存區域中的數據到pOutputArray數組中。

三、高級應用:取得函數的VB.NET指針

有時候,系統函數庫調用中會要求有回調函數,而將回調函數以參數進行傳遞時,并不能傳入回調函數名,而是需要將回調函數的地址傳參,這時候,我們就需要得到回調函數的地址。在這里我只給出例子代碼,有興趣的朋友可以去研究。

  1. Public Sub RegisterWinProc
    (ByVal hwnd As Long)   
  2. '傳入hWnd是本窗口的句柄   
  3. 'GetWindowLong從指定窗口的
    結構中取得信息   
  4. prevWndProc = GetWindowLong
    (hwnd, GWL_WNDPROC)   
  5. 'SetWindowLong在窗口結構中為
    指定的窗口設置信息   
  6. SetWindowLong hwnd, GWL_
    WNDPROC, AddressOf   
  7. WndProc DesthWnd = hwnd   
  8. End Sub  

四、結束語

大家看,VB.NET指針在進行實際操作的時候,只要掌握了相應的方法,是不是VC在這時候也就黯然失色了呢?

責任編輯:曹凱 來源: 中國IT實驗室
相關推薦

2010-01-08 18:02:33

VB.NET事件

2010-01-15 13:30:53

VB.NET Tool

2010-01-19 15:21:55

VB.NET區域性

2010-01-11 16:15:13

VB.NET枚舉功能

2010-01-20 18:34:46

VB.NET Syst

2010-01-07 16:16:03

VB.NET變量作用域

2010-01-21 16:30:58

VB.NET對象瀏覽器

2010-01-14 13:27:33

VB.NET操作符li

2010-01-15 10:32:06

VB.NET繼承

2009-11-10 16:46:52

VB.NET指針應用

2010-02-06 09:01:58

ViewState

2009-11-10 16:27:45

VB.NET指針

2010-01-07 18:17:00

VB.NET連接SAP

2010-01-20 18:45:44

VB.NET DoEv

2009-12-24 14:30:56

VB.NET

2010-01-08 15:22:22

VB.NET局部變量

2010-02-25 17:22:39

WCF服務行為

2010-01-21 17:34:48

VB.NET Bool

2009-10-14 15:20:21

VB.NET窗體指針

2010-01-18 17:37:32

VB.NET文本框處理
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一卡二卡在线观看 | 美国黄色毛片 | 精品国产一区二区三区久久 | 欧美精品在欧美一区二区 | 在线观看视频一区二区三区 | 欧美激情 一区 | 亚洲视频区 | 91亚洲欧美 | 狠狠热视频| 国产精品免费一区二区三区 | 91精品久久久久久久久久小网站 | 国产日韩欧美一区二区在线播放 | 欧美性大战久久久久久久蜜臀 | 日韩另类视频 | 97伦理电影 | 高清人人天天夜夜曰狠狠狠狠 | 成在线人视频免费视频 | 免费一区二区 | 91精品国产91久久久久久 | 99视频网站| 日韩精品在线看 | 国产精品高潮呻吟久久aⅴ码 | 欧美日韩免费在线 | 日韩 欧美 二区 | 毛片一区二区 | 中文字幕在线视频一区二区三区 | 成人免费视频在线观看 | 国产一区二区中文字幕 | 国产精品区二区三区日本 | 欧洲亚洲精品久久久久 | 二区中文字幕 | 91欧美 | 日韩午夜在线观看 | 91久久北条麻妃一区二区三区 | 国产精品美女久久久久久久网站 | 午夜一区二区三区在线观看 | 中国一级特黄真人毛片免费观看 | 91久久精品一区二区二区 | 欧美视频 | 亚洲bt 欧美bt 日本bt | 91av免费看 |