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

VB無所不能之指針介紹

開發 后端
本文對VB指針的用法做出了詳細的說明。VB中為什么使用指針呢?一是為了數據操作速度的需求,二是考慮到在對系統庫函數的調用時需要進行的指針的傳參。

一、為什么VB要用指針:

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

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

 1、數據操作速度的需求

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

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

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

二、VB怎么用指針

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

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

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

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

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

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

  1. Private Type VB數組  
  2.    數組維數  
  3.    數組大小  
  4.    真實的數組  
  5. 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

  函數原型

  VOID CopyMemory(

  PVOID Destination,

  CONST VOID *Source,

  DWORD Length

  );

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

第二個參數:源地址指針

第三個參數:復制的大小

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

B、如何用VB指針

1、如何取得數組的指針

請看如下程序:

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

說明:

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

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

請看如下程序:

CopyMemory ByVal pOutputArray, ByVal pData, UBound(outputArray)

說明:

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

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

有時候,系統函數庫調用中會要求有回調函數,而將回調函數以參數進行傳遞時,并不能傳入回調函數名,而是需要將回調函數的地址傳參,這時候,我們就需要得到回調函數的地址。

在這里我只給出例子代碼,有興趣的朋友可以去研究。

  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 WndProc  
  7. DesthWnd = hwnd  
  8. End Sub 

四、結束語

大家看,VB在處理指針的時候,只要掌握了相應的方法,是不是VC在這時候也就黯然失色了呢?

本文出自 “《Java程序員,上班那點事兒》的那點事兒” 博客。

【編輯推薦】

  1. OO世界中的核心概念 .NET中的多態
  2. ASP.NET開發程序過程中值得注意的兩個地方
  3. 全面總結.NET 4.0新特性:C#和VB.NET的取長補短
  4. 深入理解Java多態性
  5. ASP.NET的錯誤處理機制
責任編輯:yangsai 來源: 51CTO博客
相關推薦

2021-04-07 10:02:18

人工智能技術互聯網

2013-05-22 14:05:18

2015-10-28 15:47:22

谷歌物聯網互聯網

2025-02-17 00:00:25

CSS工具樣式

2015-04-30 14:53:43

Build 2015微軟Azure

2021-04-17 23:05:29

手機黑科技APP

2021-08-16 10:13:26

AI DeepMind人工智能

2023-11-28 12:09:43

Linux網絡工具

2019-12-19 14:17:11

以太坊去中心化加密貨幣

2014-06-13 02:21:14

2020-03-09 10:43:28

人工智能疫情機器人

2014-03-11 23:02:00

2013-04-09 14:23:12

3D打印

2021-04-05 22:37:29

微信小程序手機

2011-09-12 15:32:58

2023-09-07 07:08:49

ChatGPTAI節點

2021-02-07 00:29:14

支付寶互聯網返鄉隔離政策

2023-09-06 06:38:18

AMDCPUGPU

2024-06-14 09:21:56

2021-04-20 10:47:59

手機APP科技
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91视频免费 | 国产激情一区二区三区 | 国产精品久久久久久久久久久免费看 | 国内精品一区二区 | 亚洲色视频 | 亚洲午夜视频在线观看 | 天天拍天天操 | 国产美女视频黄a视频免费 国产精品福利视频 | 国产精品视频网 | 欧美日韩中文国产一区发布 | 黑人成人网 | 日韩在线国产 | 久久精品视频在线播放 | 欧美第一区| 日韩在线播放网址 | 成人免费网站www网站高清 | 欧美激情精品久久久久久变态 | 亚洲第一福利视频 | 久久久一区二区三区 | 精品一区二区三区免费视频 | 一区二区三区视频在线免费观看 | 久久国产电影 | 久久精品国产清自在天天线 | 日韩综合网 | 欧美精品在线观看 | 成人免费视频观看视频 | 日韩欧美在线播放 | 亚洲国产成人精品女人久久久 | 男人的天堂在线视频 | 免费看国产一级特黄aaaa大片 | 国产在线看片 | 精品福利在线视频 | 精品真实国产乱文在线 | 成人污污视频 | 国产精品成人国产乱一区 | 免费看国产一级特黄aaaa大片 | 99热精品在线观看 | 欧美精品一区在线 | 欧美激情综合五月色丁香小说 | 欧美成人自拍视频 | 国产精品高清一区二区三区 |