电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 认证考试-> 全国等级考试
vb“变态”用法之高效字串指针类_visualbasic教程
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
使用VB里的字串类型String有两大不足:第一、它的分配是由VB运行时控制,我们不能将其分配在指定内存处;第二,任何一次对字串的赋值操作都要进行内存重新分配。要实现高效、灵活的字串处理,我们必须克服这两大不足。

  对于第一个问题,通过修改String变量里放着的BSTR描述符指针可以实现;对于第二个问题,可以用Mid语句(注意是语句而不是函数)来赋值。不详细讲了,直接看下面的这个类:
  

  OptionExplicit

  

  ********************************************************

  clsBSTR.cls

  作者:熊超ID:AdamBear2002年3月18日

  http://www.csdn.net/Author/AdamBear

  你可以自由使用本类模块,不过请保留本声明

  ********************************************************

  

  PrivateDeclareSubCopyMemoryLib"kernel32"Alias"RtlMoveMemory"(DestinationAsAny,SourceAsAny,ByValLengthAsLong)

  

  不要直接对sString赋值(可以用MID语句),将其设为公有仅为提高效率。

  PublicsStringAsStringBSTR描述符指针

  

  PrivatepStrAsLongBSTR地址

  PrivatenMaxLenAsLongBSTR最大字节数

  
  让本字串指向特定地址

  PublicSubAttach(AddrAsLong,OptionalnLenAsLong)

  pStr=Addr

  修改BSTR描述符指针,使其指向Addr

  CopyMemoryByValVarPtr(sString),Addr,4

  

  IfIsMissing(nLen)ThenExitSub

  设定最大字串字节数

  nMaxLen=nLen

  

  EndSub

  

  还原本字串原BSTR描述符

  PublicSubDetach()

   CopyMemoryByValVarPtr(sString),0&,4

  EndSub

  

  让本字串指向源字串

  PublicSubAttachStr(sStrAsString)

   AttachStrPtr(sStr),LenB(sStr)

  EndSub

  

  data为缺省属性

  PublicPropertyLetdata(sValAsString)

   DimcAsLong

   c=LenB(sVal)

   超过最大字串数,抛出错误。

   Ifc>nMaxLenThenErr.RaisevbObjectError 3000,"CString::LetData","溢出"

   写字串长度

   CopyMemoryByVal(pStr-4),c,4

   写字串

   Mid(sString,1)=sVal

  EndProperty

  

  可以通过公有变量sString来读字串,效率更高

  PublicPropertyGetdata()AsString

   data=sString

  EndProperty

  

  PrivateSubClass_Terminate()

   CallDetach

  EndSub


  用法如下,假设我们已通过VitualAlloc,HeapAlloc,MapViewOfFile这样的内存管理API得到了一个4k个字节的可读写的内存地址baseAddr:

  DimsShareAsNewclsBSTR

  留下前4个字节用于BSTR保存字串字节数

  sShare.Attach(baseAddr 4,4096-4)

  下面的字串"Test"会直接写到baseAddr 4字节处

  sShare="Test"

  DimyAsString

  读字串时可以用sString属性或缺省属性

  y=sShare.sString

  用AttachStr方法Attach到一个字串。

  必须要先Detach

  sShare.Detach

  sShare.AttachStr(y)

  sShare="Hahaha"

  Debug.Printy

  一旦AttachStr到字串y后,对sShare的修改就相当于对y的修改。

  并且以后对y的修改也只能用Mid语句

  Mid(y,1)="xxxxx"

  不能直接赋值,这样VB会将原来y所指(也是sShare所指)内存释放,

  重新分配y。这样在访问sShare时会出错。

  y="Test"

  使用这个类有几个需要注意的地方。

  1、读字串时可以用sString属性来读,更快。

  读sShare有两种方法,一种是用缺省属性Data来读,一种是直接用sString属性来读。用sString属性不重新分配内存,要快得多。

  2、不要直接给sString赋值,应使用缺省的data属性来赋值。

  之所以把sString属性暴露出来,是为了效率和方便。我们可以用Mid语句对其进行修改,但不要直接用"="来赋值。

  3、注意Attach的第二个参数,表示字串的最大字节数,不要让它超过已经分配的内存。

  4、用AttachStr将本字串对象Attach到某个字串(比如上面的y)上后,不能再对这个字串y重新赋值,也不能将其传递到会对其重新赋值的过程。

  这么多需要注意的问题,用起来岂不是更不方便。的确,用它的之前要考虑是不是必须的。因为建立这个类也一样有开销。所以还有一个需要注意的问题:

  5、它主要的应用还是在于将字串安放在指定内存处。虽然它也可以让同一个进程内几个的字串达到共享的目的,但是如果只是两三个很小的字串这样时做反而慢了。

  后计:

  数组指针和字串指针我们已经谈过了,对于普通的数值类型变量的指针没有什么Hack的必要,但是它关系到一个有用的技术,下篇文章再谈。

->


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·全国计算机等级考试四级复习纲要一[4]_全国等级考试
·photoshop滤镜打造个性不规则须毛边框_photoshop教程
·photoshop教你制作美丽魔幻星云_photoshop教程
·照片特效处理:为肖像照片增加杂色颗粒_photoshop教程
·07上半年计算机等级考试辽宁报名19日结束_全国等级考试
·计算机等级考试四级考试的体会和感受_全国等级考试
·全国计算机等级考试四级复习纲要一[1]_全国等级考试
·07年4月计算机等级二级vf模拟笔试题五_全国等级考试
·全国计算机等级考试四级复习纲要一[3]_全国等级考试
·photoshop水彩特效表现处理方法_photoshop教程

最新文章
·photoshop鼠绘实例:浪漫夏夜壁纸_photoshop教程
·无需工具使用自带功能轻松优化win xp_windows xp
·windows server 2008十大新技术亮点_windows server 2008
·c#网络应用编程基础练习题与答案(十)_全国等级考试
·c#网络应用编程基础练习题与答案(九)_全国等级考试
·c#网络应用编程基础练习题与答案(八)_全国等级考试
·c#网络应用编程基础练习题与答案(七)_全国等级考试
·c#网络应用编程基础练习题与答案(六)_全国等级考试
·c#网络应用编程基础练习题与答案(五)_全国等级考试
·c#网络应用编程基础练习题与答案(四)_全国等级考试


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号