转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
VB深度下潜 之 一米深度(VB指针入门)         ★★★★

VB深度下潜 之 一米深度(VB指针入门)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1609 更新时间:2009/4/23 15:42:05

前 言

 

本来我也是非常赞同网上一个流行的观点,VB只是一个玩具。诚然,作为一个VB的普通使用者的确无法玩出更多的东东。但是,这几个月我完全不管VB的普通应用,而是一头扎入COM的海洋里,凭着潘爱民老师的一片小帆《COM原理及应用》以及一袋干粮《Advance Visual Basic》。居然在冰冷的技术海洋里转了几个月。终于发现了一个VB惊天之迷。然后当然有了这个长篇。

如里不是偶然,在五笔字型里,VB是代表“好”字。但我所说的迷不是指这个。请你跟随我来拨云见日,看清VB是什么。如果当你全部看清了以下的事实,我相信你不会说VB是一个玩具。

 

起初,比尔的灵运行于水上。

比尔说要有DOS,于是就有了DOS

……

第八天,比尔说要有VB,于是就创造出了VB

                                                《 3S 新约第一章》

 

深度下潜

 

 

你需要一套不错的潜水服(VB6.0企业版,你不会说你没有吧,其实我只有D版的,呵呵)一个潜水镜(VC6.0所带的OleView),当然你还得有较好的游泳技术(坚实的COM技术和C/C++功底,不过我也不是很好),然而最重要的是,你可以忍受这次痛苦的经历。如果你是PLMM,可以直接与我联系,我会来保护你安全,呵呵。

Everybody ,ok? Lets go

 

第一天

下潜深度(一米,水温0°C),时间北京时间零点整。

“大家好!我是这次探险的队长BlueDog,其实我并不是情圣,呵呵,虽然很多MM都把我当作梦中情人。”

“你们都不舒服么,为什么大家都在呕吐,噢,我知道了,这很正常么,是晕船呀。”

“呯!”

。。。。。。。

好了,费话少说。拿出你们的JJ(操,我是指你的机器,电脑,计算机,懂不懂!)

打开一个VB工程,建一个标准的EXE。接下来的,我们需要使用到VB的指针,当我的话没有说完的时候,一只蚊子嗡嗡的说:“老大,VB中可没有指针呀”。

“啪”,世界清静了!

“我最不喜欢有人打断我的讲话了,哼!”

对了,在下水之前,我还没有发给你们一个很重要的装备氧气瓶(3S Ole TypeLib),这是居家旅行,杀人灭口的必备利器。

“哪里有得买呢?”

http://www.xtcz.net/bbs/dispbbs.asp?boardid=8&id=1096

你下载后,需要解压,你后你会得到一个3SoleLib.tlb的文件,此文件是美国进口,中国贴牌生产的。所以使用此文件我不保证没有任何官司缠身。至少如果你用于商业软件,你得请我吃当地的大排档一次,作为你的使用费。

然后用最经典的DOS命令

copy c:\3solelib.tlb c:\windows\system32

好了,你然后在你新建的工程中选择 工程->引用 ,引用这个文件,不会用,去死吧。

然后是不是发生了很奇妙的事情???

没有,晕,老大,你按F2看看,是不是多了一个 olelib的东东

不知道?去死吧,受我一记极度冰冻拳。

有什么用?好,我来告诉你有什么用。

以前,你写个API是不是要用Declare之类的东东,现在用不着了,你可以直接使用这个API了,至少对于大部分的与COM有关的API是这样子的了。(具体的原因以后进行说明)

如果你真的不懂也不紧,谁叫你是郭靖呢。我们需要里面一个很重要的东东,你在对象浏缆器中可以查找MoveMemory,是不是可以找到以下相关的定义。

Sub MoveMemory(pDest As Any, pSource As Any, ByteLen As Long)

这便是我们今天所要找的东东。

下面我们在一个Form上加一个按钮。然后在CODE界面录入

Private Sub Command1_Click()

  Dim i As Long

  Dim j As Long

 

i = 3

  j = 4

 

  MoveMemory ByVal Varptr(i), ByVal VarPtr(j), 4

 

  Debug.Print i, j

End Sub

运行,看看,发生了什么。I的值也变成了4 ,这是真的。神呀。一定发生了什么。让我们来看看倒底发生了什么。

 首先我们看到Varptr,老师告诉我们有问题问MSDN,但是MSDN没告诉我们。到GOOGLE查一查,好多不多,原来是取变量的地址。再到VB的对象浏缆器中找找,打开显示隐含成员,然后再查找,VB会显示

Function VarPtr(Ptr As Any) As Long

    VBA._HiddenModule 的成员

比尔在这里隐藏了这个东东,在它的附近有ObjPtr、StrPtr,它们又是作什么用的呢,简单的说Objptr是取对象地址,StrPtr是取字符串地址的。这两个东东明天再谈。

那么,另一个MoveMemory又是什么?来看看MSDN的原文

The MoveMemory function moves a block of memory from one location to another.

VOID MoveMemory (
  PVOID Destination// address of move destination
  CONST VOID *Source, // address of block to move
  DWORD Length        // size, in bytes, of block to move
);

对于梵文不好的同学,我给大家翻译一下(MoveMemory这个函数的作用是将一堆钱从一个口袋移到另一个口袋,)好,太好了,那么要是写上

Movemoney(mybag,bossbag,1000000000000)

大哥,看清点是Memory不是money!

那么,

就只能将一块内存的数据搬到另一块内存

是这样。

其实很早以前,美国的高手风清杨同志(Bruce McKinney)就搞出了这个东东,让VB门人也可以象C门人一样练葵花宝典而不用自宫。实在是我等之大幸。不过他重新定义成CopyMemory,实际上Windows API中是没有这个东东的。

 

好了,笑话少说,看看上面那行代码是什么意思

MoveMemory ByVal Varptr(i), By

[1] [2]  下一页


[Web开发]authentication mode=Windows/之“/”应用程序中的…  [Delphi程序]用 Delphi 学设计模式(二) 之 工厂方法篇 (原创…
[Delphi程序]用 Delphi 学设计模式(一) 之 简单工厂篇 (原创…  [Delphi程序]P2P 之 UDP穿透NAT的原理与实现
[网页制作]Fireworks MX2004 之Shapes初体验(二  [网页制作]Fireworks MX2004 之Shapes初体验(一)
[网页制作]DW MX 2004 之 Flash Element  [Web开发]ASP 之  Cookies 讲座
[Sql Server]JScript.Net 之 SqlDataReader读取数据  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台