VisualBasic深度下潜之海蛇缠绕

2016-02-19 14:22 1 1 收藏

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的VisualBasic深度下潜之海蛇缠绕教程,一起来看看吧!超容易上手~

【 tulaoshi.com - 编程语言 】

海蛇”有人在惊呼。
  
  只见在海底深处游来一条黑色的长长的海蛇,几乎所有的人都在发呆。但是海蛇说了一句让我们胆寒的话“我就是有名的VB字符串,如果你们继续下潜的话,就得想通过我”。
  
  我习惯性的观察着它,因为我知道要打败一个对手,就必须深入的了解对手。
  
  因此我写了一段小CODE来了解它。
  
  -> DimstrAsString
  str="Givemea美女"
  DimL1AsLong
  DimL2AsLong
  L1=Len(str)
  L2=LenB(str)
  Debug.PrintL1,L2->
  这个代码运行得很好,完全符合我的想像,在立即窗口中显示了12,24,
  
  Good,于是我准备在窗口中用TextOut把它打印出来,至于为什么我一定要这个函数而不用其它的,你管得着么?所以我写下了于下代码
  
  ->DimstrAsString
  str="Givemea美女"
  DimL1AsLong
  DimL2AsLong
  L1=Len(str)
  L2=LenB(str)
  Debug.PrintL1,L2
  TextOutMe.hDC,100,100,str,L1->
  结果我发现不对?看来是字符串长度不对,想起来了,在VB中字符串是BSTR型的,那么应该用L2作长度,对不对呢,试试就知道了。
  
  天呀,在字符串后出现了天书,难道是上帝在暗示我什么时候给我一个美女?
  
  不过我想上帝没有这么快就会答应我,因此一定是我的代码有问题。
  
  当我正在沉思的时候,所有的人都在观注着我。没办法,太帅了。
  
  所以我又迅速写下了以下的代码
  
  ->PrivateDeclareFunctionLenANSILib"kernel32"Alias"lstrlenA"(ByValstring1AsString)AsLong
  ……
  DimstrAsString
  str="Givemea美女"
  DimTrueLenAsLong
  TrueLen=LenANSI(str)
  TextOutMe.hDC,100,100,str,TrueLen->
  当我快速地按下F5后,天空中便有了回响,“Givemea美女”这句话已得到了正确的响应。
  
  这时候我看着这条海蛇,满有信心地向它游去,但是它却很诡秘的一笑。
  
  你见过蛇的笑容么,它也很缓缓的游过来了。
  
  “如果你们打算就这样通过我的话,也想得太容易了”这句话为什么这么熟悉呢。是不是在黄金十二宫里的什么人说的吧,
  
  “给你们一个小考验,你们知道vbNullString和“”有什么区别么?”
  
  “别以为你是海蛇就了不起,你这问题也太简单了吧”我身边一个长得不是很难看的小伙子,人送外号(天下第七帅),“你以为我没读过海洋生物指南呀(对象浏览器)
  
  ConstvbNullString=""
  
  VBA.Constants的成员
  
  当调用一个外部过程,需要一个非零值的字符串时,所使用的常数
  
  “那你的意思是说是一样的了,那么vbNullChar呢?”海蛇不怀好意地看着天下第七帅。
  
  “那当然是一样的了,你看VB的说明么”天下第七帅冲口而出,不过他又觉得好象有些不对。但是VB的对象浏览器上的确写着
  
  ->ConstvbNullChar=""->
  VBA.Constants的成员
  
  那么下面这段代码代表什么呢?
  
  海蛇给出了它的代码
  
  ->Dims1AsString
  Dims2AsString
  Dims3AsString
  s1=vbNullString
  s2=vbNullChar
  s3=""
  
  Debug.PrintStrPtr(s1),StrPtr(s2),StrPtr(s3)
  Debug.PrintLenB(s1),LenB(s2),LenB(s3)->
  天下第七帅按下F5后,他很惊讶海蛇代码的运行结果
  
  018992841434596
  
  020
  
  那么就是说VB的说明和海蛇之间一定有人错了。而且,对于采用S1两个值都是零,指针指向零,长度为零,它不是一个普通意义上的零值呀。
  
  天下第七帅于是转过头来看着我。
  
  “小子,出风头吧,来吧,我先给你们看点东西”
  
  “你们想要打败海蛇,就一定要了解海蛇的结构”
  
  VB的字符串是一个标准的BSTR字符串,比如说”Hello”这个字符串它的结构是这样的
  
  -width="24">A->-width="30">0
  ->-width="26">0
  ->-width="37">0
  ->-width="40">‘H
  ->-width="35">0
  ->-width="48">‘e'
  ->-width="44">0
  ->-width="42">‘l'
  ->-width="40">0
  ->-width="40">‘l'
  ->-width="39">0
  ->-width="38">‘o'
  ->-width="35">0
  ->-width="35">0
  ->-width="38">0->
  可以看到前面四个字节代表字符串实际长度所占字节数,它是一个Long值。
  
  而最后两个字节是代表零值的结尾字符。
  
  而中间的十个字节正好是字符串的内容。
  
  如果我们用s1=”Hello”,那么s1是指向什么地方呢。
  
  “最初我以为s1是指向第一个字节,但是当我用自编的VB内存观测工具来看strptr(s1)后面所跟的字节值时发现s1是指向第五个字节,也就是我们字符串真正开始的地方。”
  
  “大家都了解了海蛇的结构了,那么它刚才提出的三种情况为什么会有不同呢?”我向还在发呆的下潜者。
  
  “是呀,为什么?”
  
  好了,拿出你们的OleView,在File->ViewTypeLib中打开VB6.DLL,你是不是看到了一个很奇妙的天地,别发呆,找到以下部分
  
  ->Modules->ModulesConstants->
  打开他们你便会看到VB内部真正的定义了。
  
  ->[helpcontext(0x0010aa32)]constLPSTRvbNullString="";
  
  [helpcontext(0x0010aa32)]constLPSTRvbNullChar="

来源:https://www.tulaoshi.com/n/20160219/1606835.html

延伸阅读
VisualBasic概念 为了理解应用程序开发过程,先要理解VisualBasic赖以创建的一些关键概念。因为VisualBasic是Windows开发语言,所以有必要与Windows环境保持一定的相似性。如果不熟悉Windows编程,就需要明白在Windows环境下编程和在其它环境下编程的一些根本性的差别。 Windows的工作方式:窗口、事件和消息 全面地讨...
----1.引言 ----银行的数字化监视监控系统是目前比较有市场及应用前景的开发项目,基于不同的MPEG采集卡与硬件外围设备开发的监视监控系统在国内外都有比较成型的技术。为了满足实时监视、实时采集压缩、随时回放、压缩数据流的传播等具体要求,在该系统中使用了一种用于网络视频/音频多点传输(视频广播)的视频数据采集卡,提供AVI...
标签: 浮潜 游泳
浮潜需要会游泳么 1、可以不会游泳 如果想要浮潜,不会游泳也是可以的,但是要做好一些措施。首先要有放松的心态,一般不会游泳的人比较怕水,要克服这种心态,浮潜之前最好练习一下浮潜的技巧,在泳池里或者海水比较浅,人比较多的地方先尝试下比较好。不会游泳不一定要穿好救生衣再下水,这样才可以更加安全的漂浮在海面。 2、需...
用Action控制器替换switch.jsp 在《JBuilder 2005 Servlet高级开发》中我们介绍了用户登录模块的流程,其中switch.jsp充当一个业务处理和页面转发的中心处理器。 !-- frame contents -- !-- /frame contents -- 由于JSP的设计初衷是实现页面展现逻辑,而这里我们居然"倒行逆施",将JSP用作业务处理和页面转发,显然是不...
脐带绕颈 脐带缠绕是脐带异常的一种,以缠绕胎宝宝颈部最为多见,是脐带异常中最重要的类型之一。另有一种不完全绕颈者,称为脐带搭颈。其次为缠绕躯干及肢体,常被统称为脐带绕颈或脐带缠颈。胎宝宝脐带绕颈发生率为20%~25%,绕3周及以上者很少见。 ...

经验教程

310

收藏

6
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部