admin 管理员组

文章数量: 1184232


2024年3月27日发(作者:html5 app教程)

[VB]VB中的指针,VB也可以使用指针!

一、指针是什么?

不需要去找什么标准的定义,它就是一个32位整数,在C语言和在VB里都可以用

Long类型来表示。在32位Windows平台下它和普通的32位长整型数没有什么不同,只不

过它的值是一个内存地址,正是因为这个整数象针一样指向一个内存地址,所以就有了指针

的概念。

有统计表明,很大一部分程序缺陷和内存的错误访问有关。正是因为指针直接和内存

打交道,所以指针一直以来被看成一个危险的东西。以至于不少语言,如著名的JAVA,都

不提供对指针操作的支持,所有的内存访问方面的处理都由编译器来完成。而象C和C++,

指针的使用则是基本功,指针给了程序员极大的自由去随心所欲地处理内存访问,很多非常

巧妙的东西都要依靠指针技术来完成。

关于一门高级的程序设计语言是不是应该取消指针操作,关于没有指针操作算不算一

门语言的优点,我在这里不讨论,因为互联网上关于这方面的没有结果的讨论,已经造成了

占用几个GB的资源。无论最终你是不是要下定决心修习指针技术《葵花宝典》,了解这门

功夫总是有益处的。

注意:在VB里,官方是不鼓励使用什么指针的,本文所讲的任何东西你都别指望取

得官方的技术支持,一切都要靠我们自己的努力,一切都更刺激!

让我们开始神奇的VB指针探险吧!

二、来看看指针能做什么?有什么用?

先来看两个程序,程序的功能都是交换两个字串:

【程序一】:

’’标准的做法SwapStr

Sub SwapStr(sA As String, sB As String)

Dim sTmp As String

sTmp = sA: sA = sB: sB = sTmp

End Sub

【程序二】:

’’用指针的做法SwapPtr

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _ (Destination As

Any, Source As Any, ByVal Length As Long)

Sub SwapPtr(sA As String, sB As String)

Dim lTmp As Long

CopyMemory lTmp, ByVal VarPtr(sA), 4

CopyMemory ByVal VarPtr(sA), ByVal VarPtr(sB), 4

CopyMemory ByVal VarPtr(sB), lTmp, 4

End Sub

你是不是以为第一个程序要快,因为它看着简单而且不用调用API(调用API需要额

外的处理,VB文档明确指出大量调用API将降低程序性能)。但事实上,在VB集成环境

中运行,程序二要比程序一快四分之一;而编译成本机代码或p-code,程序二基本上要比程

序一快一倍。下面是两个函数在编译成本机代码后,运行不同次数所花时间的比较:

运行100000次,SwapStr需要170毫秒,SwapPtr需要90毫秒。

运行200000次,SwapStr需要340毫秒,SwapPtr需要170毫秒。

运行2000000次,SwapStr需要3300毫秒,SwapPtr需要1500毫秒。

的确,调用API是需要额外指令来处理,但是由于使用了指针技术,它没有进行临时

字串的分配和拷贝,因此速度提高了不少。

怎么样,想不到吧!C/C++程序员那么依赖指针,无非也是因为使用指针往往能更直

接的去处理问题的根源,更有驾驭一切的快感。他们不是不知道使用指针的危险,他们不是

不愿意开卫星定位无级变速的汽车,只是骑摩托更有快感,而有些地方只有摩托才走得过去。

和在C里类似,在VB里我们使用指针也不过三个理由:

一是效率,这是一种态度一种追求,在VB里也一样;

二是不能不用,因为操作系统是C写的,它时刻都在提醒我们它需要指针;

三是突破限制,VB想照料我们的一切,VB给了我们很强的类型检查,VB象我们老

妈一样,对我们关心到有时我们会受不了,想偶尔不听妈妈的话吗?你需要指针!

但由于缺少官方的技术支持,在VB里,指针变得很神秘。因此在C里一些基本的技

术,在VB里就变得比较困难。本文的目的就是要提供给大家一种简单的方法,来将C处

理指针的技术拿到VB里来,并告诉你什么是可行的,什么可行但必须要小心的,什么是可

能但不可行的,什么是根本就不可能的。

三、 程咬金的三板斧

是的,程序二基本上就已经让我们看到VB指针技术的模样了。总结一下,在VB里

用指针技术我们需要掌握三样东西:CopyMemory,VarPtr/StrPtr/ObjPtr, AdressOf. 三把斧头,

程咬金的三板斧,在VB里Hack的工具。

1、CopyMemory

关于CopyMemory和Bruce McKinney大师的传奇,MSDN的Knowledge Base中就有

文章介绍,你可以搜索"ID: Q129947"的文章。正是这位大师给32位的VB带来了这个可以


本文标签: 指针 程序 技术 处理 使用