VisualBasic深度下潜之海蛇缠绕

风情默默

风情默默

2016-02-19 14:22

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的VisualBasic深度下潜之海蛇缠绕教程,一起来看看吧!超容易上手~
海蛇”有人在惊呼。
  
  只见在海底深处游来一条黑色的长长的海蛇,几乎所有的人都在发呆。但是海蛇说了一句让我们胆寒的话“我就是有名的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="
展开更多 50%)
分享

猜你喜欢

VisualBasic深度下潜之海蛇缠绕

编程语言 网络编程
VisualBasic深度下潜之海蛇缠绕

Asp深度揭密(下)

ASP
Asp深度揭密(下)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

深度解析VC中的消息(下)

编程语言 网络编程
深度解析VC中的消息(下)

哪些海岛适合浮潜 适合浮潜的海岛

海岛 游泳
哪些海岛适合浮潜 适合浮潜的海岛

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

VisualBasic移除Form右上方之『X』按钮

编程语言 网络编程
VisualBasic移除Form右上方之『X』按钮

VisualBasic编码

编程语言 网络编程
VisualBasic编码

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

笔记本电脑的BIOS在哪?

笔记本电脑的BIOS在哪?

VisualBasic6.0实用编程技巧3例

VisualBasic6.0实用编程技巧3例
下拉加载更多内容 ↓