亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

VB“變態”用法之高效字串指針類

2019-11-18 17:31:11
字體:
來源:轉載
供稿:網友
使用VB里的字串類型String有兩大不足:第一、它的分配是由VB運行時控制,我們不能將其分配在指定內存處;第二,任何一次對字串的賦值操作都要進行內存重新分配。要實現高效、靈活的字串處理,我們必須克服這兩大不足。

  對于第一個問題,通過修改String變量里放著的BSTR描述符指針可以實現;對于第二個問題,可以用Mid語句(注意是語句而不是函數)來賦值。不詳細講了,直接看下面的這個類:
  

  OptionExplicit

  

  '********************************************************

  'clsBSTR.cls

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

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

  '你可以自由使用本類模塊,不過請保留本聲明

  '********************************************************

  

  

  PubliCSStringAsString'BSTR描述符指針

  

  PrivatepStrAsLong'BSTR地址

  PrivatenMaxLenAsLong'BSTR最大字節數

  
  '讓本字串指向特定地址

  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的必要,但是它關系到一個有用的技術,下篇文章再談。

->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
北条麻妃久久精品| 成人女保姆的销魂服务| 久久久99久久精品女同性| 亚洲黄色www网站| 欧美在线观看www| 久久成人亚洲精品| 日韩美女福利视频| 亚洲国产精品电影在线观看| 亚洲理论在线a中文字幕| 青青草精品毛片| 亚洲精选中文字幕| 久色乳综合思思在线视频| 久久人91精品久久久久久不卡| 在线亚洲午夜片av大片| 中文字幕国产亚洲| 国产精品海角社区在线观看| 欧洲精品毛片网站| 久久综合久久美利坚合众国| 欧美日韩日本国产| 国产精品久久久久久久久久99| 精品视频9999| 欧美裸体xxxx极品少妇| 欧美一性一乱一交一视频| 国产精品久久久久久久久久免费| 91久久久久久久久久| 欧美亚州一区二区三区| 欧美理论在线观看| 国产精品久久激情| 91久热免费在线视频| 91精品国产色综合久久不卡98口| 国产日韩欧美另类| 深夜福利日韩在线看| 亚洲性线免费观看视频成熟| 国产精品免费福利| 欧美最近摘花xxxx摘花| 亚洲人成绝费网站色www| 国产精品亚洲视频在线观看| 精品国产区一区二区三区在线观看| 欧美亚洲另类在线| 国产精品久久久久久五月尺| 久久精品最新地址| 欧美中文字幕在线视频| 91在线无精精品一区二区| 国产成人在线亚洲欧美| 一本久久综合亚洲鲁鲁| 色一情一乱一区二区| 国产一区二区激情| 成人精品久久久| 成人免费看片视频| 色偷偷9999www| 日韩免费av片在线观看| 亚洲欧美日韩中文在线制服| 久久久中精品2020中文| 欧美日本亚洲视频| 在线观看欧美日韩国产| 777国产偷窥盗摄精品视频| 国产精选久久久久久| 国产日韩欧美在线播放| 色爱av美腿丝袜综合粉嫩av| 亚洲天堂第一页| 国产精品美女免费| 久久久www成人免费精品张筱雨| 欧美高清视频免费观看| 欧美第一淫aaasss性| 亚洲人成免费电影| 日韩av最新在线观看| 欧美高清激情视频| 久久久999精品免费| 日韩国产欧美精品一区二区三区| 日韩av综合网| 精品亚洲一区二区三区在线观看| 91精品中国老女人| 精品久久久久久中文字幕一区奶水| 久久精品国产成人精品| 欧美性色xo影院| 亚洲999一在线观看www| 亚洲电影中文字幕| 亚洲欧美一区二区三区四区| 国产成人欧美在线观看| 亚洲黄色av女优在线观看| 在线播放日韩精品| 久久国产天堂福利天堂| 久久理论片午夜琪琪电影网| 亚洲人成网站免费播放| 国产精品成人久久久久| 亚洲大胆人体在线| 国产精品亚洲激情| 欧美日韩国产在线播放| 国产精品久久999| 久久精品国产久精国产一老狼| 伦伦影院午夜日韩欧美限制| 久久精品夜夜夜夜夜久久| 91精品国产综合久久香蕉922| 亚洲成人精品视频| 欧美久久精品一级黑人c片| 国产精品自产拍在线观看中文| 亚洲天堂网站在线观看视频| 中文字幕综合一区| 久久精品男人天堂| 国产精品入口免费视| 亚洲在线www| 欧美激情伊人电影| 成人看片人aa| 国产精品久久久久久久久久| 亚洲午夜未满十八勿入免费观看全集| 国产精品热视频| 国产精品日日做人人爱| 久久中文字幕国产| 色诱女教师一区二区三区| 国产美女91呻吟求| xxav国产精品美女主播| 国产欧美精品一区二区| 夜夜嗨av一区二区三区四区| 成人淫片在线看| 最近2019年好看中文字幕视频| 日产精品99久久久久久| 不卡毛片在线看| 亚洲国产精品99久久| 91在线视频成人| 成人福利视频网| 亚洲精品自拍第一页| 日韩中文字幕久久| 精品久久久久久亚洲国产300| 欧美日韩精品国产| 久久九九有精品国产23| 国产午夜精品全部视频在线播放| 久久久在线视频| 国产自产女人91一区在线观看| 亚洲乱码一区av黑人高潮| 亚洲天堂免费视频| 欧美在线视频在线播放完整版免费观看| 国产精品va在线播放| 最近2019年好看中文字幕视频| 久久影视电视剧免费网站| 日韩69视频在线观看| 91沈先生作品| 亚洲丝袜在线视频| 97国产精品视频人人做人人爱| 69视频在线免费观看| 亚洲欧美激情四射在线日| 欧美激情中文字幕在线| 亚洲精品一区二区在线| 国产精品免费电影| 精品久久久国产精品999| 中文字幕精品视频| 91精品国产九九九久久久亚洲| 热久久美女精品天天吊色| 中文字幕在线日韩| 日韩免费av一区二区| 国产成人精品国内自产拍免费看| 亚洲在线免费看| 九九久久综合网站| 亚洲欧美国产va在线影院| 久久777国产线看观看精品| 亚洲www视频| 综合激情国产一区| 日本韩国在线不卡| 人人做人人澡人人爽欧美| 国产在线精品成人一区二区三区| 精品久久久久久久久久| 国产精品91免费在线| 亚洲国产日韩欧美在线动漫| 精品国产一区二区三区在线观看| 精品中文字幕乱|