| 
 ÕªÒª£ºVisual Basic µÄλ²Ù×÷¹¦ÄܽÏÈõ£¬ÉõÖÁÁ¬×î³£ÓõÄÒÆÎ»ÔËËã¶¼²»Ö§³Ö£¬Òò´ËÔÚʹÓã֣¿ª·¢ÖîÈçÊý¾Ý¼ÓÃÜ¡¢Ñ¹Ëõ¡¢Í¨ÐÅÖ®ÀàµÄ³ÌÐòʱÍùÍùÀ§ÄÑÖØÖØ¡£Õë¶ÔÕâÒ»ÎÊÌ⣬±¾ÎÄÏêϸµØ²ûÊÍÁËλ²Ù×÷µÄ±¾ÖÊ£¬²¢ÀûÓãףé£î32 £Á£Ð£Éº¯ÊýʵÏÖÁËÕûÐͱäÁ¿µÄ²ð·Ö¡¢ºÏ²¢¡¢ÒÆÎ»µÈ£Ö£Â²»Ö§³ÖµÄλ²Ù×÷¹¦ÄÜ¡£
 ¹Ø¼ü´Ê£ºVisual Basic¡¢Î»²Ù×÷¡¢ÒÆÎ»
 Ò» ÒýÑÔ
 ¡¡¡¡±ÊÕßÔÚ±à³Ìʵ¼ùÖз¢ÏÖ£¬£Ö£Â¶Ôλ²Ù×÷µÄÖ§³Ö½öÏÞÓÚAND¡¢OR¡¢XOR¼¸ÖÖλÔËË㣬ԶԶ²»ÈçÆäËûµÄ¿ª·¢¹¤¾ßÄÇÑùÈ«Ãæ£¨ÈçVisual C++¡¢C++Builder¡¢DelphiµÈ¿ª·¢¹¤¾ß¶¼ÌṩÁËÕûÐαäÁ¿µÄÒÆÎ»¡¢²ð·Ö¡¢ºÏ²¢µÄÔËË㣩£¬Òò´ËÔÚʹÓã֣±àдÖîÈç¼ÓÃÜÖ®ÀàµÄͨÓÃÊý¾Ý´¦Àí³ÌÐòʱÍùÍùÀ§ÄÑÖØÖØ¡£ÎªÁËʹÒÔºóµÄ¿ª·¢¹¤×÷²»ÔÙÏÝÈ뽩¾Ö£¬ÎÒ¿ªÊ¼Ñ°ÇóÔöÇ¿VBλ²Ù×÷¹¦ÄܵÄͨÓ÷½·¨£¬ÒÔ´ïµ½Ò»ÀÍÓÀÒݵÄЧ¹û¡£
 ¡¡¡¡£Ö£ÂµÄÊý¾ÝÀàÐͲ»¹»·á¸»£¬ÕûÐÎÊýÖ»°üÀ¨Byte¡¢Integer¡¢LongÈýÖÖÀàÐÍ£¬·Ö±ð¶ÔÓ¦C++ÖÐµÄ unsigned char¡¢short ºÍ long ÀàÐÍ£¬¶øÎÒÃdz£ÓõĶþ×Ö½ÚÎÞ·ûºÅÕûÐÎunsigned short(Ò²½Ð¡°×Ö¡±¡¢Word)¡¢ËÄ×Ö½ÚÎÞ·ûºÅÕûÐÎunsigned long(Ò²½Ð¡°Ë«×Ö¡±¡¢DWord)ÔÚVBÖÐȴûÓб»Ö§³Ö¡£ µ«ºÃÔÚÎÞ·ûºÅÊýºÍÓзûºÅÊýÔÚ¶þ½øÖƵIJã´ÎÉÏûÓÐÈκβî±ð£¬²»Í¬Ö®´¦½öÔÚÓÚ±àÒëÆ÷¶Ô±äÁ¿µÄÀí½â¡£ÔÚ½øÐÐλ²Ù×÷ʱÎÒÃÇÖ»¹ØÐıäÁ¿µÄ¶þ½øÖÆÎ»£¬Òò´Ë£Ö£ÂÖеÄIntegerÀàÐÍ¿ÉÒÔµ±×÷WordÀàÐÍʹÓã¬LongÀàÐÍÔò¶ÔÓ¦DWord¡££¨´ËºóÎÄÖÐÌá¼°µÄIntegerÀàÐ;ùÖ¸VB IntegerÀàÐÍ£¬LongÀàÐ;ùÖ¸VB LongÀàÐÍ£¬Word ¡¢DWordÀàÐÍÔòÊDz»ÒÀÀµÓÚÌØ¶¨±àÒëÆ÷µÄ¶Ô¶þ×Ö½Ú¡¢ËÄ×Ö½ÚÕûÐÎÖµµÄͨÓóƺô£©ÔÙÀ´¿´Î»ÔËËã·½Ãæ£¬¿ÉÒÔ¿´³öVB²»Ö§³ÖÕûÐͱäÁ¿µÄ×óÒÆ¡¢ÓÒÒÆ¡¢²ð·Ö¡¢ºÏ²¢µÈ²Ù×÷¡£
 ¡¡¡¡¾¹ýÉÏÊöµÄ·ÖÎöÖ®ºó£¬ÒѾȷ¶¨Á˹¤×÷µÄ¿ÉÐÐÐԺ͹¤×÷Ä¿±ê£¬ÓÚÊDZÊÕß¾ö¶¨¿ª·¢Ò»¸öͨÓÃÄ£¿éÀ´ÔöÇ¿VBµÄλ²Ù×÷¹¦ÄÜ£¬Õâ¸öÄ£¿éÊÇ¿ÉÖØÓõģ¬Ö»Òª°ÑÕâ¸öÄ£¿é¼ÓÈ빤³ÌÖУ¬¾Í¿ÉÒÔÏóʹÓÃVBµÄÄÚÖú¯ÊýÒ»Ñù͸Ã÷µÄʹÓÃÄ£¿éÖеĺ¯Êý£¬·Ç³£·½±ã¡£Èç¹ûʹÓôóÁ¿µÄ¿ÉÖØÓÃÄ£¿éÀ´¿ª·¢³ÌÐò£¬Ôò¿ª·¢ÖÜÆÚ¶Ì£¬´úÂë¿É¶ÁÐԺã¬Ò×ÓÚά»¤£¬²»ÈÝÒ׳ö´í¡£
 ¶þÉè¼ÆË¼Â·
 1. ʵÏÖÕûÐαäÁ¿µÄ²ð·Ö¡¢ºÏ²¢
 ¡¡¡¡ÕûÐͱäÁ¿µÄ²ð·Ö¡¢ºÏ²¢ÊǾ³£ÒªÓõ½µÄ²Ù×÷£¬±ÈÈçIPµØÖ·¾ÍÊÇÒ»¸öËÄ×Ö½ÚµÄË«×Ö£¬ÓÐʱºòΪÁËÒÔµã·ÖÊ®½øÖƵķ½Ê½ÏÔʾIPµØÖ·£¬¾ÍÐèÒªµ¥¶ÀÈ¡³öÿ¸ö×Ö½ÚµÄÖµ£¬¶øÓÐʱºòΪÁ˰ѵã·ÖÊ®½øÖƵÄIPµØÖ·×ª»»Îª¼ÆËã»úÄÚ²¿µÄË«×Ö£¬ÓÖÐèÒª°ÑËĸö×Ö½Ú×éºÏ³ÉÒ»¸öË«×Ö¡£VBûÓÐÌṩÕâÑùµÄ¹¦ÄÜ£¬ËùÒÔÕûÐͱäÁ¿µÄ²ð·Ö¡¢ºÏ²¢Ò²ÊÇÎÒÃÇÕâ´ÎҪʵÏֵŦÄÜ¡£ÁíÍâÕûÐͱäÁ¿µÄ²ð·Ö¡¢ºÏ²¢Ò²ÊÇʵÏÖInteger¡¢LongÀàÐͱäÁ¿ÒÆÎ»µÄǰÌáÌõ¼þ(ºóÃæ¡°·Ö¶øÖÎÖ®²ßÂÔ¡±½«»áÌáµ½)£¬Ö»ÒªÊµÏÖÁËÕûÐͱäÁ¿µÄ²ð·ÖºÏ²¢£¬ÒÆÎ»ÎÊÌâ¾ÍÍêÈ«½â¾öÁË¡£
 ·½·¨1£ºÀûÓÃAPIº¯ÊýCopymemoryʵÏÖ
 ¡¡¡¡ÔÚÕâÀï±ÊÕßÀûÓÃWin32 API º¯ÊýCopyMemoryʵÏÖÁËÕûÐαäÁ¿µÄ²ð·Ö¡¢ºÏ²¢²Ù×÷¡£ÔÚVBÖÐʹÓÃAPIº¯Êý±ØÐëÒªÉùÃ÷£¬CopyMemoryº¯ÊýµÄÉùÃ÷´úÂëÈçÏ£º
 Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
 (Destination As Any£¬ Source As Any£¬ ByVal Length As Long)
 ¡¡¡¡ÆäÖеIJÎÊýDestinationÊÇÄ¿±êÄÚ´æµÄµÚÒ»¸ö×Ö½ÚµØÖ·£¬²ÎÊýSourceÊDZ»¸´ÖÆÄÚ´æµÄµÚÒ»¸ö×Ö½ÚµØÖ·£¬²ÎÊýLengthÊÇÐèÒª¸´ÖƵÄ×Ö½ÚÊý¡£
 ¡¡¡¡ÊµÏÖÔÀíºÜ¼òµ¥£ºÒªÊµÏÖ²ð·Ö£¬¾ÍÓÃCopyMemoryº¯Êý°ÑÒ»¸öÕûÐαäÁ¿µÄÒ»²¿·Ö¿½±´µ½ÁíÒ»¸ö¸üСµÄÕûÐαäÁ¿µÄµØÖ·¿Õ¼äÖУ»¶øÊµÏֺϲ¢£¬ÔòÀûÓÃCopyMemoryº¯Êý°ÑÁ½¸ö´ýºÏ²¢µÄС±äÁ¿¿½±´µ½ÁíÒ»¸ö´óÕûÐαäÁ¿µÄµØÖ·¿Õ¼äÖС£¼ûʾÀý´úÂ룺Public Function Hi(ByVal Word As Integer) As Byte
 'ȡһ¸ö×Ö£¨Word£©µÄ¸ß×Ö½Ú£¨Byte£©
 'INPUT-------------------------------------------
 'Word ×Ö£¨Word£©
 'OUTPUT------------------------------------------
 '·µ»ØÖµ Word²ÎÊýµÄ¸ß×Ö½Ú
 'Last updated by Liu Qi 2004-3-20¡£
 Dim bytRet As Byte
 CopyMemory bytRet£¬ ByVal VarPtr(Word) + 1£¬ 1¡¯°ÑWordµÄ¸ß×Ö½ÚµÄÄÚÈÝ¿¾ÈëbytRetµÄµØÖ·´¦
 Hi = bytRet¡¯·µ»Ø½á¹û
 End Function
 ¡¡¡¡¸ù¾ÝÊý¾ÝÀàÐ͵IJ»Í¬ÐèÒª£¬±ÊÕß¹²Éè¼ÆÁË6¸öº¯Êý£¬HI£¨£©º¯ÊýÓÃÀ´»ñµÃÒ»¸öµ¥×ֵĸß×Ö½Ú£¬LO£¨£©º¯Êý»ñµÃµ¥×ֵĵÍ×Ö½Ú£¬HIWORD£¨£©º¯Êý»ñµÃË«×ֵĸßλ×Ö£¬LOWORD£¨£©º¯ÊýË«×ֵĵÍλ×Ö¡££Ã£Ï£Î£¨£©º¯Êý°ÑÁ½¸ö×Ö½Ú×éºÏ³É×Ö£¬CONWORD£¨£©º¯Êý°ÑÁ½¸ö×Ö×éºÏ³ÉË«×Ö¡£Ö»Òª°ÑÕ⣶¸öº¯Êý×éºÏÓ¦ÓþͿÉÒÔËæÒâµÄ²ð·Ö¡¢×éºÏ¸÷ÖÖÕûÐͱäÁ¿¡£ÀýÈçÇ°ÃæÌáµ½µÄ£É£ÐµØÖ·£¬£É£ÐµØÖ·ÊÇÓÃÒ»¸ö£Ä£×£Ï£Ò£ÄÀàÐͱäÁ¿´æ´¢µÄ£¬ÔÚ£Ö£ÂÖÐÔò¶ÔÓ¦LongÀàÐͱäÁ¿£¬¼ÙÉèÒ»¸ö£É£ÐµØÖ·´æ´¢ÔÚ³¤ÕûÐͱäÁ¿ÖУ¬¾Í¿ÉÒÔÕâÑùÌáȡһ¸ö£É£ÐµØÖ·µÄ×î¸ß×Ö½Ú£º£È£É£¨£È£É£×£Ï£Ò£Ä£¨lng£É£Ð£©£©¡£
 ¡¡¡¡ÓÉÓÚ´úÂë½Ï³¤£¬¹ÊûÓÐÔÚÎÄÕÂÖÐд³öÈ«²¿´úÂë¡£
 ·½·¨2£ºÀûÓð²È«Êý×é½èÓÃÄÚ´æµÄ·½·¨ÊµÏÖ
 ¡¡¡¡·½·¨1ËäÈ»ÓÃÆðÀ´¼òµ¥·½±ã£¬µ«ÊÇÒªÖ´ÐÐAPIº¯Êýµ÷Ó㬺¯Êýµ÷ÓÃʱҪ±£´æÏÖ³¡¡¢»Ö¸´ÏÖ³¡£¬Ê±¼ä¿ªÏúºÜ´ó£¬Ð§ÂÊÌ«µÍ£¬Òò´Ë²»ÊʺϴóÊý¾ÝÁ¿Ãܼ¯ÔËËãµÄ³¡ºÏ¡£±ÊÕßÔÚ¿ª·¢¼ÓÃÜÈí¼þÊ±ÔøÊ¹Ó÷½·¨1À´´¦ÀíÎļþÊý¾Ý£¬Ð§¹ûºÜ²»ÀíÏ룬ËÙ¶ÈÆæÂý¡£ÆäʵÓÐÒ»ÖÖ·½·¨¿ÉÒÔÇÉÃîµÄƹýVB£¬ÈÃÒ»¸öÊý×éÖ±½Ó·ÃÎÊÆäËû±äÁ¿µÄÄÚ´æ¿Õ¼ä£¬´Ó¶ø´ïµ½²ð·Ö¡¢ºÏ²¢ÕûÐαäÁ¿µÄÄ¿µÄ¡£ÓÉÓÚÕâÖÖ·½·¨Ê¡È¥ÁËAPIº¯Êýµ÷Óã¬Òò´ËЧÂʷdz£¸ß¡£ÏÂÃæ¾ÍÈÃÎÒÃÇÈÏʶһÏÂVBÖеݲȫÊý×é¡£VBÖеݲȫÊý×éÓëCÓïÑÔÖеÄÊý×éÓкܴóµÄ²î±ð£¬ËäÈ»ÔÚVBºÍCÓïÑÔÖÐÊý×é±äÁ¿¶¼ÊÇÖ¸Õ룬µ«CÓïÑÔÖеÄÊý×é±äÁ¿Ö±½ÓÖ¸ÏòÊý×éÔªËØ£¬¶ø VBÖеÄÊý×é±äÁ¿È´ÊÇÖ¸ÏòÒ»¸öSafeArray½á¹¹£¬Õâ¸öSafeArray½á¹¹ÖеÄpvDataÓò²ÅÖ¸ÏòÊý×éÔªËØ¡£
 ¡¡¡¡ÄÇôÕâ¸öSafeArray½á¹¹ÊÇ×öʲôÓõÄÄØ£¿Ëü´æ´¢×ÅÊý×éµÄÉϽ硢Ͻ硢άÊý¡¢ÔªËØ´óСµÈһϵÁеÄÐÅÏ¢£¬ÕýÊÇSafeArray½á¹¹µÄ´æÔÚ£¬Ê¹µÃVB³ÌÐòÄܹ»¶ÔÊý×éµÄ·ÃÎÊ×öÔ½½ç¼ì²é£¬Õâ¾ÍÊÇΪʲôVBÖеÄÊý×é½Ð×ö°²È«Êý×éµÄÔÒò£¬¶øCÓïÑÔÖеÄÊý×éÏÔÈ»²»¾ß±¸Ô½½ç¼ì²éµÄÄÜÁ¦¡£µ±È»°²È«Êý×éµÄȱµã¾ÍÊÇûÓÐCÓïÑÔµÄÊý×éÁé»î£¬µ«¾¡¹ÜÈç´Ë£¬ÎÒÃÇ»¹ÊÇÓа취²Ù×ÝËü£¬Í¨¹ý¶Ô°²È«Êý×éµÄ²Ù×Ý£¬¿ÉÒÔÈÃËü·ÃÎÊÈÎÒâµÄÄÚ´æÎ»Öã¬ÉõÖÁ°üÀ¨ÆäËû±äÁ¿µÄÄÚ´æ¿Õ¼ä¡£¶ÔÓÚһάÊý×éÀ´Ëµ£¬ËüµÄSafeArray½á¹¹ÈçÏ£ºType SafeArray1d '1άÊý×éµÄ SafeArray ¶¨Òå
 cDims As Integer 'άÊý
 fFeatures As Integer '±êÖ¾
 cbElements As Long 'µ¥¸öÔªËØµÄ×Ö½ÚÊý
 clocks As Long 'Ëø¶¨¼ÆÊý
 pvData As Long 'Ö¸ÏòÊý×éÔªËØµÄÖ¸Õë
 cElements As Long 'ά¶¨Ò壬¸ÃάµÄÔªËØ¸öÊý
 Lbound As Long '¸ÃάµÄϽç
 End Type
 ¡¡¡¡Èç¹ûÏÔʽµÄ¸øÒ»¸öÊý×é±äÁ¿¸³Öµ£¬ÈÃËüÖ¸ÏòÎÒÃÇ×Ô¼º´´½¨µÄSafeArray½á¹¹£¬¾Í¿ÉÒÔͨ¹ýÉèÖÃSafeArray½á¹¹µÄpvDataÓòÀ´·ÃÎÊÈÎÒâÄÚ´æÎ»Öá£Ç뿴ʾÀý´úÂ룺Public Declare Function VarPtrArray Lib "msvbvm60.dll" _Alias "VarPtr" (ptr() As Any) As Long
 Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (Destination As Any£¬ Source As Any£¬ ByVal Length As Long)
 Private Sub Command2_Click()
 Dim pBytesInLong() As Byte
 Dim SA1D As SafeArray1d
 Dim i As Long
 With SA1D
 .cDims = 1
 .fFeatures = 17
 .cbElements = 1
 .clocks = 0
 .pvData = VarPtr(i) 'ʹÊý×éµÄÊý¾ÝÖ¸ÕëÖ¸Ïò³¤ÕûÐαäÁ¿ i
 .cElements = 4
 .Lbound = 0
 End With
 'ʹÊý×é±äÁ¿£¨Æäʵ¾ÍÊǸöÖ¸Õ룩ָÏòÎÒÃÇ×Ô¼º´´½¨µÄ SafeArray1d ½á¹¹
 CopyMemory ByVal VarPtrArray(pBytesInLong)£¬ VarPtr(SA1D)£¬ 4
 i = &HFFFFFFFF
 MsgBox pBytesInLong(1) '·ÃÎʳ¤ÕûÐαäÁ¿µÄµÚ2¸ö×Ö½Ú£¨´ÓµÍ´¦¿ªÊ¼Êý£©
 pBytesInLong(3) = 0 '°ÑÈ«²¿Êý×éÔªËØÉèΪ0
 pBytesInLong(2) = 0
 pBytesInLong(1) = 0
 pBytesInLong(0) = 0
 MsgBox i 'Äã»á·¢ÏÖ i Ò²±ä³ÉÁË 0
 '°ÑÊý×é±äÁ¿£¨Æäʵ¾ÍÊǸöÖ¸Õ룩ָÏò 0£¬¼È C ÓïÑÔÖÐµÄ NULL
 CopyMemory ByVal VarPtrArray(pBytesInLong)£¬ 0&£¬ 4
 End Sub
 ¡¡¡¡´Ó´úÂëÖпÉÒÔ¿´µ½ÎÒÃÇÓÃÒ»¸ö×Ö½ÚÊý×é½èÓÃÁ˳¤ÕûÐαäÁ¿iµÄµØÖ·¿Õ¼ä£¬´Ó¶ø¿ÉÒÔͨ¹ýÊý×éÔªËØ·ÃÎʱäÁ¿iµÄ¸÷¸ö×Ö½Ú¡£ÕâÑùҲʵÏÖÁ˲ð·Ö¡¢×éºÏÕûÐαäÁ¿µÄÄ¿µÄ£¬ºÍ·½·¨1Êâ;ͬ¹é£¬µ«ºÜÏÔÈ»·½·¨2²»ÐèÒªº¯Êýµ÷Ó㬲»ÐèÒªÊý¾Ý¸´ÖÆ£¬Òò´ËЧÂʷdz£¸ß¡£ÓÃÕâÖÖ·½·¨£¬ÎÒרÃŹ¹ÖþÁËÒ»¸öÄ£¿é£ºFastBitExÄ£¿é£¬ÊµÏÖÁË·½·¨1ÖÐÌá¼°µÄ6¸öº¯ÊýµÄFast°æ±¾£¬´úÂëºÜ³¤£¬²»ÔÚÕâÀï¸ø³ö£¬Çë¶ÁÕß²ÎÔÄ´úÂë¡£
 2£®ÒÆÎ»ÔËËãµÄÉè¼ÆÊµÏÖ
 ¡¡¡¡ÔںܶàVBµÄ×ÊÁϺʹúÂëÖж¼ÓóËÒÔ2µÄ·½·¨ÊµÏÖ×óÒÆ£¬³ýÒÔ2µÄ·½·¨ÊµÏÖÓÒÒÆ¡£ÕâÊÇ¿ÉÐеģ¬Ò²ÊÇÓÐÀíÂÛÒÀ¾ÝµÄ¡£ÏÂͼÊÇÒ»¸öBYTEÀàÐ͵ÄȨֵ±í£º
 
 
| λÐòºÅ  | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |  
| Ȩֵ  | 27  | 26  | 25  | 24  | 23  | 22  | 21  | 20  |  ¡¡¡¡¿ÉÒÔ¿´³öÿһλµÄȨֵ¶¼ÊDZÈËüµÍһλµÄÄÇһλµÄȨֵµÄ2±¶£¬¶ÔÒ»¸öBYTE±äÁ¿×óÒÆÒ»Î»Ï൱ÓÚÿһ¸ö¶þ½øÖÆÎ»¶¼Ïò¸ßÎ»ÒÆ¶¯£¬ÔòÿһλµÄȨֵ±äΪÔÀ´µÄÁ½±¶£¨×î¸ßλ³ýÍ⣩£¬ÓÉÓÚBYTE±äÁ¿µÄÊ®½øÖÆÖµµÈÓÚËüµÄÿ¸ö¶þ½øÖÆÎ»µÄÖµºÍ¸ÃλȨֵµÄ³Ë»ýµÄ×ܺͣ¬ËùÒÔ°ÑÒ»¸öBYTE±äÁ¿×óÒÆºÍ°ÑËüµÄÊ®½øÖÆÖµ³ËÒÔ2ÊǵÈЧµÄ£¬Î¨Ò»µÄÇø±ð¾ÍÊÇÈç¹ûBYTE±äÁ¿µÄ×î¸ßλΪ 1£¬³ËÒÔ2»áÒç³ö£¬ÎÒÃÇҪʹÓÃÒ»¸öС¼¼ÇÉ·ÀÖ¹Òç³ö£ºÏȰÑ×î¸ßλÆÁ±ÎΪ0£¬ÔÙ³ËÒÔ2¾Í²»»áÒç³öÁË¡£¾Ý´ËÎÒÃÇ¿ÉÒÔд³ö°ÑBYTEÀàÐͱäÁ¿×óÒÆ1λµÄº¯Êý£ºPrivate Function ShLB_By1Bit(ByVal Byt As Byte) As Byte
 ¡®°ÑBYTEÀàÐͱäÁ¿×óÒÆ1λµÄº¯Êý£¬²ÎÊýBytÊÇ´ýÒÆÎ»µÄ×Ö½Ú£¬º¯Êý·µ»ØÒÆÎ»½á¹û
 ¡®(Byt And &H7F)µÄ×÷ÓÃÊÇÆÁ±Î×î¸ßλ¡£ *2£º×óÒÆÒ»Î»
 ShLB_By1Bit = (Byt And &H7F) * 2
 End Function
 ¡¡¡¡ÀàËÆµÄ°ÑBYTEÀàÐͱäÁ¿ÓÒÒÆ1λʱ²ÉÓóýÒÔ2µÄ·½·¨ £¬ÕâʱҪעÒâÉáȥСÊý룬ÒÔÃâVB°´ÕÕËÄÉáÎåÈëµÄ·½·¨´¦ÀíСÊýλ¶øÒýÆð½á¹û²»ÕýÈ·¡£¾Ý´ËÎÒÃÇ¿ÉÒÔд³ö°ÑBYTEÀàÐͱäÁ¿ÓÒÒÆ1λµÄº¯Êý£ºPrivate Function ShRB_By1Bit(ByVal Byt As Byte) As Byte
 ¡®°ÑBYTEÀàÐͱäÁ¿ÓÒÒÆ1λµÄº¯Êý£¬²ÎÊýBytÊÇ´ýÒÆÎ»µÄ×Ö½Ú£¬º¯Êý·µ»ØÒÆÎ»½á¹û
 ¡®/2£ºÓÒÒÆÒ»Î»
 ShRB_By1Bit = Fix(Byt / 2)
 End Function
 ¡¡¡¡ÓÐÁËÒÆÒ»Î»µÄº¯Êý£¬ÄÇÃ´ÒÆÈÎÒâλÊýµÄº¯Êý¾Í²»ÄÑд³öÁË£ºÖ»Òª·´¸´µÄµ÷ÓÃShLB_By1Bit()»òShRB_By1Bit()¾Í¿ÉÒÔÁË£¬²Î¼û´úÂëÖеĺ¯ÊýShLB() ºÍ ShRB()¡£
 ¡¡¡¡ÖÁ´Ë×Ö½Ú±äÁ¿µÄÒÆÎ»ÎÊÌâÒѾµÃµ½½â¾ö£¬ÏÖÔÚÔÙÀ´¿´µ¥×ÖºÍË«×ÖµÄÒÆÎ»£¬ËüÃÇ·Ö±ð¶ÔÓ¦VBÖеÄIntegerºÍLongÀàÐÍ¡£ÓóËÒÔ2ºÍ³ýÒÔ2µÄ·½·¨»¹ÐÐÂð£¿Óü¸¸öÊýÊÔÑéһϾͻᷢÏÖ£¬Õâ¸ö·½·¨Ê§ÁéÁË¡£Çë¿´¸÷ÖÖÔËËã½á¹ûµÄ¶Ô±È£º
 ¡¡¡¡A=1001¡¯0111¡¯1110¡¯1100
 ¡¡¡¡ÓÒÒÆÒ»Î»£º 0100¡¯1011¡¯1111¡¯0110
 ¡¡¡¡£¨A/2£©£º1100¡¯1011¡¯1111¡¯0110
 ¡¡¡¡ÎÊÌâºÃÏó±äµÄÓе㸴ÔÓÁË£¬Æäʵµ¼ÖÂÕâ¸ö·½·¨Ê§ÁéµÄ×î¸ù±¾µÄÔÒòÊÇVB°ÑIntegerºÍLongÀàÐ͵±×öÓзûºÅÊýÀí½â£¬°ÑÒ»¸öÓзûºÅÊý³ËÒÔ2»ò³ýÒÔ2£¬×î¸ß루¼´·ûºÅ룩¸ù±¾¾ÍûÓвÎÓëÔËË㣬ÕâÒ»µã´ÓÉÏÃæµÄÔËËã½á¹û¶Ô±È¾Í¿ÉÒÔ¿´³öÀ´£º°ÑA³ýÒÔ2 ÒÔºó×î¸ßλ»¹ÊÇ1£¬¸ù±¾¾ÍûÓб䣬¶øÓÒÒÆÒ»Î»ºó×î¸ßλ²¹ÈëµÄÊÇ0£¬Á½ÖÖÔËËãµÄ½á¹û×ÔÈ»ÊÇÏàÈ¥ÉõÔ¶¡£²»Ö»ÊÇ·ûºÅλµÄÎÊÌ⣬Èç¹ûÑ¡ÓÃÆäËüµÄÊý¾ÝÀ´¶Ô±È»¹»á·¢ÏÖ¸ü¶àµÄÎÊÌ⣬ÕâÀï¾Í²»ÔÙ׸ÊöÁË¡£ÄѵÀ¾ÍÕæµÄûÓа취ÁËÂ𣿰취µ±È»ÊÇÓе쬼ÈÈ»ÒѾʵÏÖÁË×Ö½ÚµÄÒÆÎ»²Ù×÷£¬ÄÇô¿ÉÒÔ Óá°·Ö¶øÖÎÖ®¡±µÄ²ßÂÔ£¬°ÑInteger±äÁ¿Ò»·ÖΪ¶þ£¬²ð³ÉÁ½¸ö×Ö½Ú£¬°ÑÕâÁ½¸ö×Ö½Ú½»¸øShLB£¨£©»ò£Óh£Ò£Â£¨£©£¬°ÑËüÁ©¸÷ÒÆÒ»Î»£¬×îºó°ÑÒÆÎ»ºóµÄÁ½×Ö½ÚÖØÐÂ×éºÏ³ÉÒ»¸öInteger±äÁ¿¾ÍÊÇÒÆÎ»ºóµÄ½á¹ûÁË£¬Õâ²»¾ÍʵÏÖÁËIntegerÀàÐͱäÁ¿µÄÒÆÎ»ÁËÂð¡£ÕâÖÖ·½·¨ÍêÈ«ÈÆ¹ýÁËÓзûºÅÊýµÄ·ûºÅλ¸øÎÒÃÇ´øÀ´µÄÖÚ¶àÂé·³£¬Ë³ÀûµÄʵÏÖÁËÄ¿µÄ¡£ÓÃÕâÖÖ·½·¨ÐèҪעÒâÒ»µã£ºÈç¹ûÊÇ×óÒÆ£¬Òª±£Ö¤°ÑµÍ×Ö½ÚµÄ×î¸ßÎ»ÒÆÈë¸ß×Ö½ÚµÄ×îµÍ룬·´Ö®Èç¹ûÊÇÓÒÒÆ£¬Òª°Ñ¸ß×Ö½ÚµÄ×îµÍÎ»ÒÆÈëµÍ×Ö½ÚµÄ×î¸ßλ¡£´ÓÏÂÃæµÄ´úÂëÖпÉÒÔ¿´µ½ÊµÏֵĹý³Ì£ºPrivate Function ShLW_By1Bit(ByVal Word As Integer) As Integer
 '°ÑÒ»¸ö×Ö×óÒÆÒ»Î»µÄº¯Êý£¬ ²ÎÊýWordÊÇ´ýÒÆÎ»µÄ×Ö£¬º¯Êý·µ»ØÒÆÎ»½á¹û
 'INPUT-------------------------------
 'Word Ô´²Ù×÷Êý
 'OUTPUT------------------------------
 '·µ»ØÖµ ÒÆÎ»½á¹û
 'last updated by Liu Qi 2004-3-24
 Dim HiByte As Byte£¬ LoByte As Byte
 '°Ñ×Ö²ð·ÖΪ×Ö½Ú
 HiByte = Hi(Word)£º LoByte = Lo(Word)
 '°Ñ¸ß×Ö½Ú×óÒÆÒ»Î»£¬±£Ö¤°ÑµÍ×Ö½ÚµÄ×î¸ßÎ»ÒÆÈë¸ß×Ö½ÚµÄ×îµÍλ
 HiByte = ShLB_By1Bit(HiByte) Or IIf((LoByte And &H80) = &H80£¬ &H1£¬ &H0)
 LoByte = ShLB_By1Bit(LoByte) 'µÍ×Ö½Ú×óÒÆÒ»Î»
 '°ÑÒÆÎ»ºóµÄ×Ö½ÚÔÙÖØÐÂ×éºÏ³É×Ö
 ShLW_By1Bit = Con(HiByte£¬ LoByte)
 End Function
 ¡¡¡¡ÖÁÓÚLongÀàÐÍ£¬ºÍIntegerÀàÐÍÒ»Ñù£¬ÊôÓÚÓзûºÅÊý£¬Ò²²»ÄÜÓóËÒÔ2ºÍ³ýÒÔ2µÄ·½·¨ÊµÏÖÒÆÎ»¡£ÎÒÃÇÖ»ºÃºÍ´¦ÀíIntegerÀàÐÍÒ»ÑùÈç·¨ÅÚÖÆ£¬Ó÷ֶøÖÎÖ®µÄ·½·¨ÊµÏÖÒÆÎ»¡£¾ßÌå¹ý³Ì²»ÔÙ׸Êö£¬Çë²Î¿´´úÂë¡£
 3.ÒÆÎ»ÔËËãµÄÐÔÄÜÓÅ»¯
 ¡¡¡¡±¾ÎÄÖеÄÒÆÎ»ÊµÏÖ·½·¨Æ«ÖØÓÚ´úÂëµÄ¿É¶ÁÐÔ£¬Ã»ÓÐÓÅ»¯´úÂëµÄÐÔÄÜ£¬Òò´Ë²»ÊÊÓÃÓÚ¶ÔÐÔÄÜÒªÇó¿Á¿ÌµÄ³¡ºÏ¡£ÎªÁËÓÅ»¯ÐÔÄÜ£¬¿ÉÒÔÓòé±í·¨À´ÓÅ»¯Ö´ÐÐËÙ¶È£¬ÕâÊÇÒ»ÖÖÄÿռ任ʱ¼äµÄ·½°¸£¬ÒÆÎ»½á¹û¿ÉÒÔÊÂÏȶ¼¼ÆËã³öÀ´£¬±£´æÔÚÒÆÎ»±íÖУ¬ÓõÄʱºò²é±í£¬±ÈÓÃ*2£¬/2¿ì¶àÁË¡£±ÈÈ磬×Ö½ÚÀàÐ͵ÄÒÆÎ»±íÊý×鶨ÒåÈçÏ£º¡¡¡¡¡¡dim aSHLB(0 to 255,1 to 7) as byte'×Ö½Ú×óÒÆ±í
 ¡¡¡¡dim aSHRB(0 to 255,1 to 7) as byte'×Ö½ÚÓÒÒÆ±í
 ¡¡¡¡Ê¹Ó÷½·¨Ò²ºÜ¼òµ¥£¬±ÈÈçÏëÒªÇó×Ö½Ú±äÁ¿x×óÒÆÒ»Î»µÄ½á¹û£¬Ö»ÐèʹÓÃaSHLB(x,1)¾Í¿ÉµÃµ½£¬ºÍº¯Êýµ÷ÓúÜÏàËÆ¡£µ±È»£¬Ó뺯Êýµ÷Óò»Í¬µÄÊÇ£¬Ê¹ÓÃÒÆÎ»±í֮ǰһ¶¨Òª³õʼ»¯ÒÆÎ»±íµÄËùÓÐÔªËØ£¬·ñÔò»áµÃµ½´íÎóµÄ½á¹û¡£
 ¡¡¡¡IntegerÀàÐ͵ÄÒÆÎ»Ò²¿ÉÒÔÓòé±í·¨£¬ÒÆÎ»±íÕ¼Óà 65535 * 15 * 2 * 2 ¸ö×Ö½ÚµÄÄÚ´æ¿Õ¼ä¡£
 ¡¡¡¡ÒÆÎ»±íÊý×鶨ÒåÈçÏ£º¡¡¡¡aSHLW(0 to &Hffff&,1 to 15) as integer'µ¥×ÖµÄ×óÒÆ±í
 ¡¡¡¡aSHRW(0 to &Hffff&,1 to 15) as integer'µ¥×ÖµÄÓÒÒÆ±í
 ¡¡¡¡×¢Ò⣺IntegerÊÇÓзûºÅÀàÐÍ£¬Ôì±íµÄʱºòÒªÓÃËüµÄÎÞ·ûºÅÖµÀ´Ôì±í£¬Í¬Ñù²é±íµÄʱºòÒ²ÒªÓÃËüµÄÎÞ·ûºÅÖµÀ´²é±í¡££¨ÒòΪÊý×éϱêÊDz»ÔÊÐí¸ºÊýµÄ¡££©
 ¡¡¡¡ÇóIntegerÀàÐÍÎÞ·ûºÅÖµµÄ·½·¨ÊÇ£º(Int and &hFFFF&),×¢Ò⣬²»µÈͬÓÚCLng(Int)
 ¡¡¡¡Òź¶µÄÊÇ£¬LongÀàÐÍÎÞ·¨Ôì±í£¬ÒòΪLongÀàÐ͵ÄÖµµÄ·¶Î§ÊÇ 4 GB,Èç¹û¶ÔËüÔì±í£¬ÄÇô±íµÄ´óС¾Í»á³¬³ö×ܵÄÄÚ´æµØÖ·¿Õ¼ä¡£
 ¡¡¡¡²é±íÒÆÎ»µÄ´úÂëÇë²Î¼û±¾Îĸ½´øµÄ´úÂ룬ÕâÀï¾Í²»¸ø³öÁË¡£
 Èý ½áÓï
 ¡¡¡¡ÒªÏëʵÏÖ±¾ÎÄËùÊöµÄÄÇЩλ²Ù×÷º¯ÊýÆäʵÓкܶ෽·¨£¬±¾ÎÄËùÓõķ½Ê½Î´±ØÊÇ×îºÃµÄ£¬Ö÷ÒªÊÇΪÁËÌṩһÖÖ½â¾öÎÊÌâµÄ˼·£ºÔÚ±à³Ì¹ý³ÌÖÐÓöµ½ÄÑÒÔ½â¾öµÄÎÊÌâʱ£¬ÏëÒ»ÏëÄܲ»ÄܰѴóÎÊÌâ·Ö½â³ÉÄܽâ¾ö»òÒѽâ¾öµÄСÎÊÌ⣬Õâ¾ÍÊÇ¡°·Ö¶øÖÎÖ®¡±µÄ²ßÂÔ¡£Òò±ÊÕßˮƽÓÐÏÞ£¬±¾ÎÄÄÑÃâ»áÓÐÊ詺Ͳ»×ãÖ®´¦£¬»¶ÓÅúÆÀÖ¸Õý£¬ÓÐÒâ¼û»ò½¨Ò鏸ÎÒ·¢µç×ÓÓʼþliuqi5521@sina.com¡£
 ¡¡¡¡±¾³ÌÐòÔÚ Win2000+VB6.0ϵ÷ÊÔͨ¹ý¡£ 
 ------------------------------------------------------------
 ±¾ÎÄÏà¹Ø´úÂ룺
 -----------------------BitEx.Bas----------------------------
 Option Explicit
 '˵Ã÷----------------------------------------'ÕâÊÇÒ»¸öÔöÇ¿ vb µÄλ²Ù×÷¹¦ÄܵÄÄ£¿é£¬Ö÷Òª°üº¬
 'ÓÐ×óÓÒÒÆÎ»£¬È¡×Ö½Ú£¬×Ö½ÚÁ¬½ÓµÈͨÓÃÀý³Ì
 '¼æÈÝÐÔ£ºVB5.0 ,6.0
 '--------------------------------------------
 '×÷ÕߣºÁõçù £¬2005-1-11'¸öÈËÖ÷Ò³£ºhttp://LQweb.crcoo.com
 'e-Mail£ºliuqi5521@hotmail.com
 'apiº¯Êý  ¿½±´ÄÚ´æ
 Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" _
 (Destination As Any, Source As Any, ByVal Length As Long)
 '-----------------------ÏÂÃæÕâЩÀý³ÌʵÏÖÕûÐͱäÁ¿µÄ²ð·Ö£¬ºÏ²¢²Ù×÷-------------Public Function Con(ByVal HiByte As Byte, ByVal LoByte As Byte) As Integer
 '°ÑÁ½¸ö×Ö½Ú (Byte) Á¬³ÉÒ»¸ö×Ö £¨word£©
 'INPUT--------------------------------------------------------------------
 'HiByte      ²ÎÓëÁ¬½áµÄ¸ß×Ö½Ú
 'LoByte      ²ÎÓëÁ¬½áµÄµÍ×Ö½Ú
 'OUTPUT-------------------------------------------------------------------
 '·µ»ØÖµ      Á¬½áµÄ½á¹û
 'Last updated by Liu Qi 2004-3-20.
 Dim iRet As Integer
 'Óõ½µÄº¯Êý varptr() ˵Ã÷£ºÈ¡Ò»¸ö±äÁ¿µÄµØÖ·¡£
 CopyMemory ByVal VarPtr(iRet), LoByte, 1CopyMemory ByVal VarPtr(iRet) + 1, HiByte, 1
 Con = iRet
 End Function
 Public Function ConWord(ByVal HiWord As Integer, ByVal LoWord As Integer) As Long'°ÑÁ½¸ö×Ö£¨Word£©Á¬³ÉÒ»¸öË«×Ö£¨DWord£©
 'INPUT--------------------------------------------------------------------
 'HiWord      ²ÎÓëÁ¬½áµÄ¸ßλ×Ö
 'LoWord      ²ÎÓëÁ¬½áµÄµÍλ×Ö
 'OUTPUT-------------------------------------------------------------------
 '·µ»ØÖµ      Á¬½áµÄ½á¹û
 'Last updated by Liu Qi 2004-3-20.
 Dim lRet As Long
 CopyMemory ByVal VarPtr(lRet), LoWord, 2CopyMemory ByVal VarPtr(lRet) + 2, HiWord, 2
 ConWord = lRet
 End Function
 Public Function Hi(ByVal Word As Integer) As Byte'ȡһ¸ö×Ö£¨Word£©µÄ¸ß×Ö½Ú£¨Byte£©
 'INPUT-------------------------------------------
 'Word      ×Ö£¨Word£©
 'OUTPUT------------------------------------------
 '·µ»ØÖµ     Word²ÎÊýµÄ¸ß×Ö½Ú
 'Last updated by Liu Qi 2004-3-20.
 Dim bytRet As Byte
 CopyMemory bytRet, ByVal VarPtr(Word) + 1, 1
 Hi = bytRet
 End Function
 Public Function Lo(ByVal Word As Integer) As Byte'ȡһ¸ö×Ö£¨Word£©µÄµÍ×Ö½Ú£¨Byte£©
 'INPUT-------------------------------------------
 'Word      ×Ö£¨Word£©
 'OUTPUT------------------------------------------
 '·µ»ØÖµ     Word²ÎÊýµÄµÍ×Ö½Ú
 'Last updated by Liu Qi 2004-3-20.
 Dim bytRet As Byte
 CopyMemory bytRet, ByVal VarPtr(Word), 1
 Lo = bytRet
 End Function
 Public Function HiWord(ByVal DWord As Long) As Integer'ȡһ¸öË«×Ö£¨DWord£©µÄ¸ßλ×Ö
 'INPUT-------------------------------------------
 'DWord      Ë«×Ö
 'OUTPUT------------------------------------------
 '·µ»ØÖµ     DWord²ÎÊýµÄ¸ßλ×Ö
 'Last updated by Liu Qi 2004-3-20.
 Dim intRet As Integer
 CopyMemory intRet, ByVal VarPtr(DWord) + 2, 2
 HiWord = intRet
 End Function
 Public Function LoWord(ByVal DWord As Long) As Integer'ȡһ¸öË«×Ö£¨DWord£©µÄµÍλ×Ö
 'INPUT-------------------------------------------
 'DWord      Ë«×Ö
 'OUTPUT------------------------------------------
 '·µ»ØÖµ     DWord²ÎÊýµÄµÍλ×Ö
 'Last updated by Liu Qi 2004-3-20.
 Dim intRet As Integer
 CopyMemory intRet, ByVal VarPtr(DWord), 2
 LoWord = intRet
 End Function
 '-------------------------ÏÂÃæÕâЩÀý³ÌʵÏÖÕûÐαäÁ¿µÄÒÆÎ»-------------------
 Public Function ShLB(ByVal Byt As Byte, Optional ByVal BitsNum As Long = 1) As Byte'×Ö½ÚµÄ×óÒÆº¯Êý
 'INPUT-----------------------------
 'Byt Ô´²Ù×÷Êý
 'BitsNum ÒÆÎ»µÄλÊý
 'OUTPUT----------------------------
 '·µ»ØÖµ  ÒÆÎ»½á¹û
 'last updated by Liu Qi 2004-3-23
 Dim i&
 For i = 1 To BitsNumByt = ShLB_By1Bit(Byt)
 Next i
 ShLB = Byt
 End Function
 Public Function ShRB(ByVal Byt As Byte, Optional ByVal BitsNum As Long = 1) As Byte'×Ö½ÚµÄÓÒÒÆº¯Êý
 'INPUT-----------------------------
 'Byt Ô´²Ù×÷Êý
 'BitsNum ÒÆÎ»µÄλÊý
 'OUTPUT----------------------------
 '·µ»ØÖµ  ÒÆÎ»½á¹û
 'last updated by Liu Qi 2004-3-23
 Dim i&
 For i = 1 To BitsNumByt = ShRB_By1Bit(Byt)
 Next i
 ShRB = Byt
 End Function
 Private Function ShLB_By1Bit(ByVal Byt As Byte) As Byte'°Ñ×Ö½Ú×óÒÆÒ»Î»µÄº¯Êý,Ϊ ShlB ·þÎñ.
 'INPUT-----------------------------
 'Byt Ô´²Ù×÷Êý
 'OUTPUT----------------------------
 '·µ»ØÖµ  ÒÆÎ»½á¹û
 'last updated by Liu Qi 2004-3-23
 '(Byt And &H7F): ÆÁ±Î×î¸ßλ.  *2:×óÒÆÒ»Î»ShLB_By1Bit = (Byt And &H7F) * 2
 'ShlB_By1Bit = Byt * 2'Òç³ö²âÊÔ
 End FunctionPrivate Function ShRB_By1Bit(ByVal Byt As Byte) As Byte
 '°Ñ×Ö½ÚÓÒÒÆÒ»Î»µÄº¯Êý,Ϊ ShrB ·þÎñ.
 'INPUT-----------------------------
 'Byt Ô´²Ù×÷Êý
 'OUTPUT----------------------------
 '·µ»ØÖµ  ÒÆÎ»½á¹û
 'last updated by Liu Qi 2004-3-24
 '/2:ÓÒÒÆÒ»Î»ShRB_By1Bit = Fix(Byt / 2)
 End Function
 Public Function ShLW(ByVal Word As Integer, Optional ByVal BitsNum As Long = 1) As Integer
 '×ÖµÄ×óÒÆº¯Êý
 'INPUT-------------------------------
 'Word Ô´²Ù×÷Êý
 'BitsNum ÒÆÎ»µÄλÊý
 'OUTPUT------------------------------
 '·µ»ØÖµ  ÒÆÎ»½á¹û
 'last updated by Liu Qi 2004-3-24
 Dim i&
 For i = 1 To BitsNumWord = ShLW_By1Bit(Word)
 Next i
 ShLW = Word
 End Function
 Public Function ShRW(ByVal Word As Integer, Optional ByVal BitsNum As Long = 1) As Integer'×ÖµÄÓÒÒÆº¯Êý
 'INPUT-------------------------------
 'Word Ô´²Ù×÷Êý
 'BitsNum ÒÆÎ»µÄλÊý
 'OUTPUT------------------------------
 '·µ»ØÖµ  ÒÆÎ»½á¹û
 'last updated by Liu Qi 2004-3-24
 Dim i&
 For i = 1 To BitsNumWord = ShRW_By1Bit(Word)
 Next i
 ShRW = WordEnd Function
 Private Function ShLW_By1Bit(ByVal Word As Integer) As Integer
 '°ÑÒ»¸ö×Ö×óÒÆÒ»Î»µÄº¯Êý
 'INPUT-------------------------------
 'Word Ô´²Ù×÷Êý
 
 'OUTPUT------------------------------
 '·µ»ØÖµ  ÒÆÎ»½á¹û
 'last updated by Liu Qi 2004-3-24
 Dim HiByte As Byte, LoByte As Byte
 '°Ñ×Ö²ð·ÖΪ×Ö½ÚHiByte = Hi(Word): LoByte = Lo(Word)
 '°Ñ¸ß×Ö½Ú×óÒÆÒ»Î»,±£Ö¤°ÑµÍ×Ö½ÚµÄ×î¸ßÎ»ÒÆÈë¸ß×Ö½ÚµÄ×îµÍλ
 HiByte = ShLB_By1Bit(HiByte) Or IIf((LoByte And &H80) = &H80, &H1, &H0)
 LoByte = ShLB_By1Bit(LoByte) 'µÍ×Ö½Ú×óÒÆÒ»Î»
 '°ÑÒÆÎ»ºóµÄ×Ö½ÚÔÙÖØÐÂ×éºÏ³É×Ö
 ShLW_By1Bit = Con(HiByte, LoByte)
 End Function
 Private Function ShRW_By1Bit(ByVal Word As Integer) As Integer'°ÑÒ»¸ö×ÖÓÒÒÆÒ»Î»µÄº¯Êý
 'INPUT-------------------------------
 'Word Ô´²Ù×÷Êý
 
 'OUTPUT------------------------------
 '·µ»ØÖµ  ÒÆÎ»½á¹û
 'last updated by Liu Qi 2004-3-27
 Dim HiByte As Byte, LoByte As Byte
 '°Ñ×Ö²ð·ÖΪ×Ö½ÚHiByte = Hi(Word): LoByte = Lo(Word)
 'µÍ×Ö½ÚÓÒÒÆÒ»Î»,±£Ö¤°Ñ¸ß×Ö½ÚµÄ×îµÍÎ»ÒÆÈëµÍ×Ö½ÚµÄ×î¸ßλLoByte = ShRB_By1Bit(LoByte) Or IIf((HiByte And &H1) = &H1, &H80, &H0)
 '°Ñ¸ß×Ö½ÚÓÒÒÆÒ»Î»,HiByte = ShRB_By1Bit(HiByte)
 '°ÑÒÆÎ»ºóµÄ×Ö½ÚÔÙÖØÐÂ×éºÏ³É×ÖShRW_By1Bit = Con(HiByte, LoByte)
 End Function
 Public Function ShLD(ByVal DWord As Long, Optional ByVal BitsNum As Long = 1) As Long
 '°ÑÒ»¸öË«×Ö×óÒÆµÄº¯Êý
 'INPUT-------------------------------
 'DWord Ô´²Ù×÷Êý
 'BitsNum ÒÆÎ»µÄλÊý
 'OUTPUT------------------------------
 '·µ»ØÖµ  ÒÆÎ»½á¹û
 'last updated by Liu Qi 2004-3-28
 Dim i&
 For i = 1 To BitsNumDWord = ShLD_By1Bit(DWord)
 Next i
 ShLD = DWord
 End Function
 Public Function ShRD(ByVal DWord As Long, Optional ByVal BitsNum As Long = 1) As Long'°ÑÒ»¸öË«×ÖÓÒÒÆµÄº¯Êý
 'INPUT-------------------------------
 'DWord Ô´²Ù×÷Êý
 'BitsNum ÒÆÎ»µÄλÊý
 'OUTPUT------------------------------
 '·µ»ØÖµ  ÒÆÎ»½á¹û
 'last updated by Liu Qi 2004-3-28
 Dim i&
 For i = 1 To BitsNumDWord = ShRD_By1Bit(DWord)
 Next i
 ShRD = DWordEnd Function
 Public Function ShLD_By1Bit(ByVal DWord As Long) As Long
 '°ÑÒ»¸öË«×Ö×óÒÆÒ»Î»µÄº¯Êý£¬Îª ShlD() ·þÎñ
 'INPUT-------------------------------
 'DWord Ô´²Ù×÷Êý
 'OUTPUT------------------------------
 '·µ»ØÖµ  ÒÆÎ»½á¹û
 'last updated by Liu Qi 2004-3-29
 Dim iHiWord%, iLoWord%
 '°ÑË«×Ö²ð·ÖΪÁ½¸öµ¥×ÖiHiWord = HiWord(DWord): iLoWord = LoWord(DWord)
 '¸ßλ×Ö×óÒÆÒ»Î»,Òª°ÑµÍλ×ÖµÄ×î¸ßÎ»ÒÆµ½¸ßλ×ÖµÄ×îµÍλiHiWord = ShLW_By1Bit(iHiWord) Or IIf((iLoWord And &H8000) = &H8000, &H1, &H0)
 'µÍλ×Ö×óÒÆÒ»Î»iLoWord = ShLW_By1Bit(iLoWord)
 ShLD_By1Bit = ConWord(iHiWord, iLoWord) 'ÖØÐÂÁ¬½Ó³ÉË«×Ö·µ»Ø½á¹û
 End Function
 Public Function ShRD_By1Bit(ByVal DWord As Long) As Long'°ÑÒ»¸öË«×ÖÓÒÒÆÒ»Î»µÄº¯Êý,Ϊ ShrD() ·þÎñ
 'INPUT-------------------------------
 'DWord Ô´²Ù×÷Êý
 'OUTPUT------------------------------
 '·µ»ØÖµ  ÒÆÎ»½á¹û
 'last updated by Liu Qi 2004-3-29
 Dim iHiWord%, iLoWord%
 '°ÑË«×Ö²ð·ÖΪÁ½¸öµ¥×ÖiHiWord = HiWord(DWord): iLoWord = LoWord(DWord)
 '°ÑµÍλ×ÖÓÒÒÆÒ»Î»£¬Òª°Ñ¸ßλ×ÖµÄ×îµÍÎ»ÒÆµ½µÍλ×ÖµÄ×î¸ßλiLoWord = ShRW_By1Bit(iLoWord) Or IIf((iHiWord And &H1) = &H1, &H8000, &H0)
 '°Ñ¸ßλ×ÖÓÒÒÆÒ»Î»iHiWord = ShRW_By1Bit(iHiWord)
 ShRD_By1Bit = ConWord(iHiWord, iLoWord) 'ÖØÐÂÁ¬½Ó³ÉË«×Ö·µ»Ø½á¹û
 End Function
 Public Function ShLB_C_By1Bit(ByVal Byt As Byte) As Byte'°Ñ×Ö½Ú<<Ñ»·>>×óÒÆÒ»Î»µÄº¯Êý.C ±íʾ Cycle,Ñ»·
 'INPUT-----------------------------
 'Byt :Ô´²Ù×÷Êý
 'OUTPUT----------------------------
 '·µ»ØÖµ : ÒÆÎ»½á¹û
 'last updated by Liu Qi 2004-8-8
 '(Byt And &H7F): ÆÁ±Î×î¸ßλ.  *2:×óÒÆÒ»Î»ShLB_C_By1Bit = ((Byt And &H7F) * 2) Or IIf((Byt And &H80) = &H80, &H1, &H0)
 End Function
 Public Function ShRB_C_By1Bit(ByVal Byt As Byte) As Byte'°Ñ×Ö½Ú<<Ñ»·>>ÓÒÒÆÒ»Î»µÄº¯Êý¡£
 'INPUT-----------------------------
 'Byt :Ô´²Ù×÷Êý
 'OUTPUT----------------------------
 '·µ»ØÖµ : ÒÆÎ»½á¹û
 'last updated by Liu Qi 2004-8-8
 '(Byt And &H7F): ÆÁ±Î×î¸ßλ.  *2:×óÒÆÒ»Î»ShRB_C_By1Bit = Fix(Byt / 2) Or IIf((Byt And &H1) = &H1, &H80, &H0)
 End Function
 Public Function U2F(ByVal UnsignedLong As Long) As Double'°ÑÒ»¸ö³¤ÕûÐΰ´ÕÕÎÞ·ûºÅÊýת»¯³ÉÒ»¸ö¸¡µãÊýÖµ
 If (UnsignedLong And &H80000000) = &H80000000 Then
 'Èç¹û×î¸ß루·ûºÅλ£©Îª1£¬
 'Ôò°ÑËüµÄÆÁ±Î·ûºÅλºóµÄÖµ¼ÓÉÏ×î¸ßλÎÞ·ûºÅ±íʾ·¨µÄȨֵ(ȨֵУÕý)
 U2F = (UnsignedLong And &H7FFFFFFF) + 2 ^ 31
 Else 'Èç¹û×î¸ßλΪ 0£¬Ôò²»ÐèÌØÊâ´¦Àí
 U2F = UnsignedLong
 End If
 End Function
 Public Function F2U(ByVal Float As Double) As Long'°ÑÒ»¸ö¸¡µãÊýÖµ°´ÕÕÎÞ·ûºÅÊýת»¯³ÉÒ»¸ö³¤ÕûÐÎ
 If Float > 2 ^ 32 - 1 Or Float < 0 Then
 'ÎÞ·ûºÅÊý²»ÄÜÈÝÄɵÄÖµ
 Err.Raise 6 'Òý·¢Òç³ö´íÎó
 ElseIf Float > &H7FFFFFFF Then '×î¸ßλΪ1,ÔòÏÈÆÁ±Î×î¸ßλÒÔ˳ÀûÍê³ÉÏòÕûÐεÄת»¯£¬×îºóÔÙ°Ñ×î¸ßλµÄ1ÌíÉÏ
 F2U = CLng(Float - 2 ^ 31) Or &H80000000
 Else 'Èç¹û×î¸ßλΪ 0£¬Ôò²»ÐèÌØÊâ´¦Àí
 F2U = Float
 End If
 End Function
 Public Function UAdd(ByVal UnsignedLong1 As Long, ByVal UnsignedLong2 As Long) As Long
 '°ÑVBÖеij¤ÕûÐΰ´ÕÕÎÞ·ûºÅ¼Ó·¨Ïà¼Ó
 UAdd = F2U(U2F(UnsignedLong1) + U2F(UnsignedLong2))
 End Function
 Public Function UDif(ByVal UnsignedLong1 As Long, ByVal UnsignedLong2 As Long) As Long'°ÑVBÖеij¤ÕûÐΰ´ÕÕÎÞ·ûºÅ¼õ·¨Ïà¼õ
 UDif = F2U(U2F(UnsignedLong1) - U2F(UnsignedLong2))
 End Function
 -----------------------------------------------------------------
 -------------------------------FastBit.Bas-----------------------
 Option Explicit
 '-----------------------------------------------------'Õâ¸öÄ£¿éʹÓð²È«Êý×é¼¼ÊõʵÏÖÁËÒÔÏÂÁù¸öº¯ÊýµÄFast°æ±¾£º
 'Hi(),Lo(),HiWord(),LoWord(),Con(),ConWord()
 '¾ÊÔÑ飬Fast°æ±¾µÄº¯ÊýÐÔÄÜÌá¸ß1±¶ÒÔÉÏ
 '-----------------------------------------------------
 '×÷ÕߣºÁõçù £¬2005-1-11'¸öÈËÖ÷Ò³£ºhttp://LQweb.crcoo.com
 'e-Mail£ºliuqi5521@hotmail.com
 Private Type SafeArray1d '1άÊý×éµÄ SafeArray ¶¨Òå
 cDims As Integer 'άÊý
 fFeatures As Integer '±êÖ¾
 cbElements As Long 'µ¥¸öÔªËØµÄ×Ö½ÚÊý
 clocks As Long 'Ëø¶¨¼ÆÊý
 pvData As Long 'Ö¸ÏòÊý×éÔªËØµÄÖ¸Õë
 cElements As Long 'ά¶¨Ò壬¸ÃάµÄÔªËØ¸öÊý
 Lbound As Long '¸ÃάµÄϽç
 End Type
 
 Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
 Private Declare Sub ZeroMemory Lib "KERNEL32" Alias "RtlZeroMemory" (dest As Any, ByVal numBytes As Long)
 Private Declare Function VarPtrArray Lib "msvbvm60.dll" _Alias "VarPtr" (ptr() As Any) As Long
 Const FADF_AUTO = &H1
 Const FADF_FIXEDSIZE = &H10
 Private m_lSharedLong As Long 'Òª±»¹²ÏíµÄ³¤ÕûÐαäÁ¿Private m_aiIntsInLong() As Integer 'Òª¹²Ïí³¤ÕûÐαäÁ¿µÄµØÖ·¿Õ¼äµÄÕûÐÎÊý×é
 Private m_SA1D_IntArr As SafeArray1d 'ÕûÐÎÊý×éµÄSafeArray½á¹¹
 Private m_iSharedInt As Integer 'Òª±»¹²ÏíµÄÕûÐαäÁ¿Private m_aBytesInInt() As Byte 'Òª¹²ÏíÕûÐαäÁ¿µÄµØÖ·¿Õ¼äµÄ×Ö½ÚÊý×é
 Private m_SA1D_ByteArr As SafeArray1d '×Ö½ÚÊý×éµÄSafeArray½á¹¹
 'λ²Ù×÷ǰ³õʹ»¯¶¯×÷,Ö÷ÒªÊdzõʹ»¯£¬Èç¹û²»½øÐгõʹ»¯£¬½«»á³öÏÖ²»¿ÉÔ¤¼Æ´íÎó
 Public Sub BitOperatorInit()
 With m_SA1D_IntArr.cDims = 1 'άÊý£º1ά
 .fFeatures = 17 '±êÖ¾£ºAuto or FixedSize
 .cbElements = 2 'ÔªËØ´óС£º2¸ö×Ö½Ú
 .clocks = 0
 .pvData = VarPtr(m_lSharedLong) 'ʹÊý×éµÄÊý¾ÝÖ¸ÕëÖ¸Ïò³¤ÕûÐαäÁ¿m_lSharedLong
 .cElements = 2 'ÔªËØ¸öÊý£º2¸ö
 .Lbound = 0 'Ͻ磺0
 End With
 'ʹÊý×é±äÁ¿m_aiIntsInLongÖ¸ÏòÎÒÃÇ×Ô¼º´´½¨µÄ SafeArray1d ½á¹¹CopyMemory ByVal VarPtrArray(m_aiIntsInLong), VarPtr(m_SA1D_IntArr), 4
 With m_SA1D_ByteArr.cDims = 1 'άÊý£º1ά
 .fFeatures = 17 '±êÖ¾£ºAuto or FixedSize
 .cbElements = 1 'ÔªËØ´óС£º1¸ö×Ö½Ú
 .clocks = 0
 .pvData = VarPtr(m_iSharedInt) 'ʹÊý×éµÄÊý¾ÝÖ¸ÕëÖ¸ÏòÕûÐαäÁ¿m_iSharedInt
 .cElements = 2 'ÔªËØ¸öÊý£º2¸ö
 .Lbound = 0 'Ͻ磺0
 End With
 'ʹÊý×é±äÁ¿m_aBytesInIntÖ¸ÏòÎÒÃÇ×Ô¼º´´½¨µÄ SafeArray1d ½á¹¹CopyMemory ByVal VarPtrArray(m_aBytesInInt), VarPtr(m_SA1D_ByteArr), 4
 End Sub
 Public Sub BitOperatorEnd()'ÊÍ·Å×ÊÔ´£¬³ÌÐò½áÊøÇ°Ò»¶¨Òªµ÷ÓÃ
 '°ÑÊý×é±äÁ¿m_aiIntsInLongÖ¸Ïò 0,¼È C ÓïÑÔÖÐµÄ NULLCopyMemory ByVal VarPtrArray(m_aiIntsInLong), 0&, 4
 '°ÑÊý×é±äÁ¿m_aBytesInIntÖ¸Ïò 0,¼È C ÓïÑÔÖÐµÄ NULL
 CopyMemory ByVal VarPtrArray(m_aBytesInInt), 0&, 4
 End Sub
 '-----------------------ÏÂÃæÕâЩÀý³ÌʵÏÖÕûÐͱäÁ¿µÄ²ð·Ö£¬ºÏ²¢²Ù×÷,Fast°æ±¾-------------Public Function fastCon(ByVal HiByte As Byte, ByVal LoByte As Byte) As Integer
 '°ÑÁ½¸ö×Ö½Ú (Byte) Á¬³ÉÒ»¸ö×Ö £¨word£©
 'INPUT--------------------------------------------------------------------
 'HiByte      ²ÎÓëÁ¬½áµÄ¸ß×Ö½Ú
 'LoByte      ²ÎÓëÁ¬½áµÄµÍ×Ö½Ú
 'OUTPUT-------------------------------------------------------------------
 '·µ»ØÖµ      Á¬½áµÄ½á¹û
 'Last updated by Liu Qi 2004-3-20.
 m_aBytesInInt(1) = HiBytem_aBytesInInt(0) = LoByte
 fastCon = m_iSharedInt
 End Function
 Public Function fastConWord(ByVal HiWord As Integer, ByVal LoWord As Integer) As Long'°ÑÁ½¸ö×Ö£¨Word£©Á¬³ÉÒ»¸öË«×Ö£¨DWord£©
 'INPUT--------------------------------------------------------------------
 'HiWord      ²ÎÓëÁ¬½áµÄ¸ßλ×Ö
 'LoWord      ²ÎÓëÁ¬½áµÄµÍλ×Ö
 'OUTPUT-------------------------------------------------------------------
 '·µ»ØÖµ      Á¬½áµÄ½á¹û
 'Last updated by Liu Qi 2004-3-20.
 m_aiIntsInLong(1) = HiWordm_aiIntsInLong(0) = LoWord
 fastConWord = m_lSharedLong
 End Function
 Public Function fastHi(ByVal Word As Integer) As Byte'ȡһ¸ö×Ö£¨Word£©µÄ¸ß×Ö½Ú£¨Byte£©
 'INPUT-------------------------------------------
 'Word      ×Ö£¨Word£©
 'OUTPUT------------------------------------------
 '·µ»ØÖµ     Word²ÎÊýµÄ¸ß×Ö½Ú
 'Last updated by Liu Qi 2004-3-20.
 m_iSharedInt = Word
 fastHi = m_aBytesInInt(1)
 End Function
 Public Function fastLo(ByVal Word As Integer) As Byte'ȡһ¸ö×Ö£¨Word£©µÄµÍ×Ö½Ú£¨Byte£©
 'INPUT-------------------------------------------
 'Word      ×Ö£¨Word£©
 'OUTPUT------------------------------------------
 '·µ»ØÖµ     Word²ÎÊýµÄµÍ×Ö½Ú
 'Last updated by Liu Qi 2004-3-20.
 m_iSharedInt = WordfastLo = m_aBytesInInt(0)
 End Function
 Public Function fastHiWord(ByVal DWord As Long) As Integer'ȡһ¸öË«×Ö£¨DWord£©µÄ¸ßλ×Ö
 'INPUT-------------------------------------------
 'DWord      Ë«×Ö
 'OUTPUT------------------------------------------
 '·µ»ØÖµ     DWord²ÎÊýµÄ¸ßλ×Ö
 'Last updated by Liu Qi 2004-3-20.
 m_lSharedLong = DWord
 fastHiWord = m_aiIntsInLong(1)
 End Function
 Public Function fastLoWord(ByVal DWord As Long) As Integer'ȡһ¸öË«×Ö£¨DWord£©µÄµÍλ×Ö
 'INPUT-------------------------------------------
 'DWord      Ë«×Ö
 'OUTPUT------------------------------------------
 '·µ»ØÖµ     DWord²ÎÊýµÄµÍλ×Ö
 'Last updated by Liu Qi 2004-3-20.
 m_lSharedLong = DWord
 fastLoWord = m_aiIntsInLong(0)
 End Function
 --------------------------------------------------------------
 ---------------------------modShiftBitByte.bas---------------]
 Option Explicit
 'ÕâÊÇΪ×Ö½ÚÀàÐͱäÁ¿Ìṩ¿ìËÙµÄÒÆÎ»²Ù×÷µÄÄ£¿é£¬¿ÉÒÔʹÓñ¾Ä£¿éÖеĿì±íʵÏÖ¸ßËÙµÄÒÆÎ»ÔËËã'ÕâÊÇ´¿VBʵÏֵ쬲»ÐèÒªÈκÎDLL
 'ÐèÒª BitEx.Bas
 'Áõçù£¬×÷ÓÚ2005-1-26
 Const MAX_BYTE = &HFF&
 'ÏÂÃæÊÇÒÆÎ»±íPublic g_aShLB() As Byte '×Ö½Ú×óÒÆµÄ¿ì±í£¬µÚ1άÊÇ´ýÒÆÎ»µÄ×Ö½Ú£¬µÚ2άÊÇÒÆÎ»Î»Êý
 Public g_aShRB() As Byte '×Ö½ÚÓÒÒÆµÄ¿ì±í£¬µÚ1άÊÇ´ýÒÆÎ»µÄ×Ö½Ú£¬µÚ2άÊÇÒÆÎ»Î»Êý
 '------------------------------------------------------------------------------------
 Public Function IsInitialized() As Boolean'ÅжÏÊÇ·ñÒѾ³õʼ»¯¹ýÒÆÎ»±íµÄº¯Êý
 On Error GoTo hanlder
 g_aShLB(1, 1) = g_aShLB(1, 1)IsInitialized = True 'û³ö´í£¬ËµÃ÷³õʼ»¯¹ýÁË
 Exit Function
 hanlder:IsInitialized = False '³ö´í˵Ã÷»¹Ã»Óгõʼ»¯
 End Function
 Public Sub ShiftBitByteInit()'³õʼ»¯ÒÆÎ»±í
 If IsInitialized Then Exit Sub ' Èç¹ûÒѾ³õʼ»¯¹ýÁË£¬²»±ØÔÙ³õʼ»¯ÁË
 '·ÖÅä¿Õ¼äReDim g_aShLB(0 To MAX_BYTE, 1 To 7) As Byte '×óÒÆ±í
 ReDim g_aShRB(0 To MAX_BYTE, 1 To 7) As Byte 'ÓÒÒÆ±í
 Dim i As Long, j As Long
 For i = 0 To MAX_BYTEFor j = 1 To 7
 g_aShLB(i, j) = ShLB(i, j)
 g_aShRB(i, j) = ShRB(i, j)
 Next j
 Next i
 End Sub
 Public Sub DestoryShiftBitByteTable()'Ïú»Ù×Ö½ÚÀàÐ͵ÄÒÆÎ»±í£¬ÒÔÊÍ·ÅÄÚ´æ
 ReDim g_aShLB(0)
 Erase g_aShLB
 ReDim g_aShRB(0)Erase g_aShRB
 End Sub-------------------------------------------------------
 ---------------------------SafeArray.bas--------------------------
 '***************************************************************' (c) Copyright 2000 Matthew J. Curland
 '
 ' This file is from the CD-ROM accompanying the book:
 ' Advanced Visual Basic 6: Power Techniques for Everyday Programs
 '   Author: Matthew Curland
 '   Published by: Addison-Wesley, July 2000
 '   ISBN: 0-201-70712-8
 '   http://www.PowerVB.com
 '
 ' You are entitled to license free distribution of any application
 '   that uses this file if you own a copy of the book, or if you
 '   have obtained the file from a source approved by the author. You
 '   may redistribute this file only with express written permission
 '   of the author.
 '
 ' This file depends on:
 '   References:£¨²»ÔÙÐèÒªVBoostTypes6.olb£¬¿ÉÖ±½ÓÔÚÈκεط½Ê¹Óã©
 '     VBoostTypes6.olb (VBoost Object Types (6.0))'
 '   Files:
 '     None
 '   Minimal VBoost conditionals:
 '     None
 '   Conditional Compilation Values:
 '     None
 '
 ' This file is discussed in Chapter 2.
 '***************************************************************
 '***************************************************************'˵Ã÷£ºÕâ¸öÄ£¿éÊÇ Matthew J. Curland µÄ×÷Æ·£¬ÎÒ¸ù¾Ý×Ô¼ºµÄʵ¼ÊÐèÒª
 '×÷ÁËһЩ΢СµÄ¸Ä¶¯£¨²»ÔÙÐèÒªVBoostTypes6.olb£¬¿ÉÖ±½ÓÔÚÈκεط½Ê¹Óã©
 '£¬Ìí¼ÓÁËÖÐÎĵÄ×¢ÊÍ¡£
 '
 'ʹÓÃÕâ¸öÄ£¿é£¬¿ÉÒÔÏñ C ÓïÑÔÒ»ÑùÓÃÊý×é·ÃÎÊÈÎÒâµÄÄÚ´æÎ»ÖÃ
 '×÷ÕߣºÁõçù £¬2005-1-11'¸öÈËÖ÷Ò³£ºhttp://LQweb.crcoo.com
 'e-Mail£ºliuqi5521@hotmail.com
 '***************************************************************
 Option Explicit
 Public Type SafeArray1d '1άÊý×éµÄ SafeArray ¶¨ÒåcDims As Integer 'άÊý
 fFeatures As Integer '±êÖ¾
 cbElements As Long 'µ¥¸öÔªËØµÄ×Ö½ÚÊý
 clocks As Long 'Ëø¶¨¼ÆÊý
 pvData As Long 'Ö¸ÏòÊý×éÔªËØµÄÖ¸Õë
 cElements As Long 'ά¶¨Ò壬¸ÃάµÄÔªËØ¸öÊý
 Lbound As Long '¸ÃάµÄϽç
 End Type
 Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Declare Sub ZeroMemory Lib "KERNEL32" Alias "RtlZeroMemory" (dest As Any, ByVal numBytes As Long)
 Public Declare Function VarPtrArray Lib "msvbvm60.dll" _Alias "VarPtr" (ptr() As Any) As Long
 Public Const FADF_AUTO = &H1
 Public Const FADF_FIXEDSIZE = &H10
 Public Sub ShareMemoryViaArray(ByVal ArrayPtr As Long, _ByVal MemPtr As Long, SA1D As SafeArray1d, _
 ByVal ElemByteLen As Long, ByVal ElemCount As Long)
 'INPUT---------------------------------------------------------------------
 'ByVal ArrayPtr As Long Ö¸ÏòÊý×é±äÁ¿µÄÖ¸Õ룬Óà VarPtrArray(Êý×éÃû)»ñÈ¡
 'ByVal MemPtr As Long  Ö¸ÏòÒª½èÓõÄÄÚ´æ¿éµÄÖ¸Õë(¾ÍÊÇÆðʼµØÖ·)¡£
 'SA1D As SafeArray1d  ͨ¹ýÒýÓô«µÝÀ´µÄSafeArray1d½á¹¹±äÁ¿
 'ByVal ElemByteLen As Long Ö¸³öÊý×éҪʹÓõÄÔªËØ´óС
 'ByVal ElemCount As Long Ö¸³öÊý×éҪʹÓõÄÔªËØ¸öÊý
 '
 'OUTPUT--------------------------------------------------------------------
 'N/A
 'ǰÌõ¼þ--------------------------------------------------------------------
 'ÒªÇóÊý×é±äÁ¿±ØÐëÊÇδ·ÖÅäµÄ
 'ºóÌõ¼þ--------------------------------------------------------------------
 'N/A
 With SA1D
 'cbElements is optional because this is a 1 element array,
 'so cbElements is not needed to walk the array.  If Erase
 'is called on an array with .cbElements = 0, VB will still
 'free all pointer types, but non-pointer types will not get
 'zeroed out.  Note that the compiler calculates the length
 'of a structure at compile time, so LenB(MyStruct(0)) is
 'valid regardless of whether or not MyStruct is actually allocated.
 .cbElements = ElemByteLen 'ÔªËØ´óС
 .cDims = 1 'άÊý
 'This means that if the
 'array goes out of scope, then the pointed
 'to memory will be cleaned, but no attempt
 'will be made to free the array pointer
 'or descriptor.
 .fFeatures = FADF_AUTO Or FADF_FIXEDSIZE 'ÌØÕ÷
 .pvData = MemPtr 'Ö¸ÏòÒª½èÓõÄÄÚ´æ¿é
 .cElements = ElemCount 'ÔªËØ¸öÊý
 .Lbound = 0 ' Ͻç
 End With
 '°Ñ SafeArray ½á¹¹µÄÊ×µØÖ·¸³¸øÊý×é±äÁ¿
 CopyMemory ByVal ArrayPtr, VarPtr(SA1D), 4
 End Sub
 Public Sub UnshareMemory(ByVal ArrayPtr As Long)'INPUT---------------------------------------------------------------------
 'ByVal ArrayPtr As Long Ö¸ÏòÊý×é±äÁ¿µÄÖ¸Õ룬Óà VarPtrArray(Êý×éÃû)»ñÈ¡
 '
 'OUTPUT--------------------------------------------------------------------
 'N/A
 'ǰÌõ¼þ--------------------------------------------------------------------
 'ÒªÇóÊý×é±äÁ¿±ØÐëÊÇÓÃShareMemoryViaArray·ÖÅäµÄ£¬²»ÄÜÓÃÓÚVB·ÖÅäµÄÊý×é
 'ºóÌõ¼þ--------------------------------------------------------------------
 'N/A
 ''°ÑÊý×é±äÁ¿µÄÖµÖÃΪ0
 ZeroMemory ByVal ArrayPtr, 4
 End Sub
 ------------------------------------------------------------------
 ------------------------------ ShiftBitInt16.bas -----------------
 Option Explicit
 'ÕâÊÇΪIntegerÀàÐͱäÁ¿Ìṩ³¬¸ßËÙÒÆÎ»ÔËËãµÄÄ£¿é£¬ÓÉÓÚIntegerÀàÐ͵ķ¶Î§½Ï´ó£¬±È½ÏÕ¼Äڴ棬ËùÒÔ'ÓõÄÊǶ¯Ì¬±í£¬ÓÃʱ·ÖÅ䣬ÓÃÍê¿ÉÒÔ¾¡¿ìÏú»Ù¡££¨»¹ÓиöºÃ´¦£¬¿ÉÒÔ±ÜÃâÍü¼Ç³õʼ»¯Êý×飩
 'ÕâÊÇ´¿VB°æµÄ£¬ÓëÔÀ´ÄǸöÐèÒªDLLµÄ°æ±¾Ïà±È£¬Ê¹Óøü·½±ã¡£
 'Áõçù£¬×÷ÓÚ2005-1-26
 'ÐèÒª£ºBitEx10.Bas SafeArray.Bas modShiftBitByte.Bas
 'ÁíÍ⣺ʹÓÃÕâÁ½¸ö¿ì±íÒ»¶¨Òª×¢ÒâÒ»µã£¬Òª×öÒ»¸ö³¤ÕûÐÎÎÞ·ûºÅÀ©Õ¹Ö®ºóÔÙ²é±í£¬²»È»»á³ö´í£¬ÏñÕâÑù£º'g_aShL16(SomeInt and &HFFFF&,1)
 'Ϊʲô£¿¶Ô×î¸ßλΪ1µÄInteger,VB»á°ÑËü½âÊÍΪһ¸ö¸ºÖµ,×öÁ˳¤ÕûÐÎÀ©Õ¹£¬VB²Å»á°ÑËüÀí½âΪһ¸öÕýÖµ,
 'ÓÉÓÚÊý×éÎÞ·¨½ÓÊܸºÖµË÷Òý£¬ËùÒÔÎÒÃÇÊÇÓÃIntegerµÄÎÞ·ûºÅÖµÀ´Ôì±í
 'ËùÒÔ˵£¬²é±íµÄʱºòµ±È»ÒªÓÃIntegerµÄÎÞ·ûºÅÖµÀ´²é±í
 'ÕûÐαäÁ¿µÄÒÆÎ»±í----------------------------------------------------------------------------------------Public g_aShL16() As Integer
 Public g_aShR16() As Integer
 '--------------------------------------------------------------------------------------------------------
 Public Const MAX_UINT16 = &HFFFF& 'max unsigned int16,×¢Ò⣺ÕâÊÇÒ»¸öÓÃLong´æ´¢µÄ65535,ÎÞ·ûºÅ×ÖµÄ×î´óÖµ
 Private m_iSharedInt As Integer 'µØÖ·¿Õ¼äÒª±»¹²ÏíµÄ³¤ÕûÐÎPrivate m_aBytesInInt() As Byte 'Òª¹²Ïí³¤ÕûÐεØÖ·¿Õ¼äµÄ×Ö½ÚÊý×é
 Private m_SA1D As SafeArray1d '°²È«Êý×é½á¹¹
 Public Sub InitShL16Table() '³õʼ»¯×óÒÆ±í£¬£¨ÎªÉ¶ºÍÓÒÒÆ±í·Ö¿ªÄØ£¿°´Ðè·ÖÅ䣬ʡÄڴ棬ÐèÒªÄĸö·ÖÅäÄĸö¡££©
 Dim i As Long, j As Long
 If ShiftLeftTableIsInitialized Then Exit Sub 'Èç¹û×óÒÆ±íÒѾ³õʼ»¯¹ýÁË£¬¾ÍÍ˳ö
 ShiftBitByteInit '³õʼ»¯×Ö½ÚÀàÐ͵ÄÒÆÎ»±ímodSafeArray.ShareMemoryViaArray VarPtrArray(m_aBytesInInt), VarPtr(m_iSharedInt), m_SA1D, _
 1, 2 '¹²ÏíÄÚ´æ
 If VarPtr(m_iSharedInt) <> VarPtr(m_aBytesInInt(0)) Then MsgBox "¹²ÏíÄÚ´æÊ§°Ü!"
 ReDim g_aShL16(0 To MAX_UINT16, 1 To 15) 'ÎªÒÆÎ»±í·ÖÅä¿Õ¼ä£¬0-ffff,1-15For i = 0 To MAX_UINT16
 For j = 1 To 15
 g_aShL16(i, j) = ShL16_Internal(LoWord(i), j)
 Next j
 Next i
 UnshareMemory VarPtrArray(m_aBytesInInt) 'È¡Ïû¹²ÏíµÄÄÚ´æEnd Sub
 Public Sub DestroyShL16Table() 'Ïú»Ù×óÒÆ±í£¬ÊÍ·ÅÄÚ´æReDim g_aShL16(0)
 Erase g_aShL16
 End Sub
 Public Sub InitShR16Table() '³õʼ»¯ÓÒÒÆ±í
 Dim i As Long, j As Long
 If ShiftRightTableIsInitialized Then Exit Sub 'Èç¹ûÓÒÒÆ±íÒѾ³õʼ»¯¹ýÁË£¬ÄÇôÍ˳ö
 ShiftBitByteInit '³õʼ»¯×Ö½ÚÀàÐ͵ÄÒÆÎ»±ímodSafeArray.ShareMemoryViaArray VarPtrArray(m_aBytesInInt), VarPtr(m_iSharedInt), m_SA1D, _
 1, 2 '¹²ÏíÄÚ´æ
 If VarPtr(m_iSharedInt) <> VarPtr(m_aBytesInInt(0)) Then MsgBox "¹²ÏíÄÚ´æÊ§°Ü!"
 ReDim g_aShR16(0 To MAX_UINT16, 1 To 15) 'ÎªÒÆÎ»±í·ÖÅä¿Õ¼ä£¬0-ffff,1-15
 For i = 0 To MAX_UINT16
 For j = 1 To 15
 g_aShR16(i, j) = ShR16_Internal(LoWord(i), j)
 Next j
 Next i
 UnshareMemory VarPtrArray(m_aBytesInInt) 'È¡Ïû¹²ÏíµÄÄÚ´æEnd Sub
 Public Sub DestroyShR16Table() 'Ïú»ÙÓÒÒÆ±í£¬ÊÍ·ÅÄÚ´æReDim g_aShR16(0)
 Erase g_aShR16
 End Sub
 Public Function ShL16_Internal(ByVal Word As Integer, Optional ByVal BitNum As Long = 1) As Integer
 '×ÖµÄ×óÒÆº¯Êý£¬ËÙ¶ÈÒ»°ã,½ö¹©ÄÚ²¿Ê¹ÓÃ,ÓÃÀ´³õʼ»¯ÒÆÎ»±í»¹¿ÉÒÔ£¬ÓÃÔÚʵ¼ÊÔËËãÖоͺÁÎÞÓÅÊÆ¿ÉÑÔÁË¡£
 'INPUT-------------------------------
 'Word Ô´²Ù×÷Êý
 'BitsNum ÒÆÎ»µÄλÊý
 'OUTPUT------------------------------
 '·µ»ØÖµ  ÒÆÎ»½á¹û
 m_iSharedInt = Word '°Ñ´ýÒÆÎ»µÄÖµ¸³¸ø±»¹²ÏíµÄÕûÐÎ
 If BitNum = 8 Then 'Èç¹ûµÈÓÚ8£¬Ö±½Ó°ÑµÍ×Ö½Ú°áµ½¸ß×Ö½ÚÈ¥¾ÍOKÁËm_aBytesInInt(1) = m_aBytesInInt(0)
 m_aBytesInInt(0) = 0
 ElseIf BitNum > 8 Then 'Èç¹û´óÓÚ8£¬ÄÇô¾ÍÏÈÒÆ8룬ÔÙÒÆÊ£ÏµÄ
 m_aBytesInInt(1) = m_aBytesInInt(0)
 m_aBytesInInt(0) = 0
 m_aBytesInInt(1) = g_aShLB(m_aBytesInInt(1), BitNum - 8)
 Else 'СÓÚ8
     '°Ñ¸ß×Ö½Ú×óÒÆ£¬²¢°ÑµÍ×Ö½ÚÏàÓ¦µÄÎ»ÒÆµ½¸ß×Ö½ÚÉÏm_aBytesInInt(1) = g_aShLB(m_aBytesInInt(1), BitNum) Or g_aShRB(m_aBytesInInt(0), 8 - BitNum)
 'µÍ×Ö½Ú×óÒÆ
 m_aBytesInInt(0) = g_aShLB(m_aBytesInInt(0), BitNum)
 End If
 '·µ»Ø½á¹ûShL16_Internal = m_iSharedInt
 End FunctionPrivate Function ShR16_Internal(ByVal Word As Integer, Optional ByVal BitNum As Long = 1) As Integer
 '×ÖµÄÓÒÒÆº¯Êý,½ö¹©ÄÚ²¿Ê¹ÓÃ
 'INPUT-------------------------------
 'Word Ô´²Ù×÷Êý
 'BitsNum ÒÆÎ»µÄλÊý
 'OUTPUT------------------------------
 '·µ»ØÖµ  ÒÆÎ»½á¹û
 
 m_iSharedInt = Word '°Ñ´ýÒÆÎ»µÄÖµ¸³¸ø±»¹²ÏíµÄÕûÐÎ
 If BitNum = 8 Then 'Èç¹ûÒÆÎ»Î»ÊýµÈÓÚ8£¬ÓÒÒÆ8λ¾ÍµÈ¼ÛÓÚÖ±½Ó°Ñ¸ß×Ö½Ú°áµ½µÍ×Ö½Ú,¸ß×Ö½ÚÇåÁã
 m_aBytesInInt(0) = m_aBytesInInt(1)
 m_aBytesInInt(1) = 0
 ElseIf BitNum > 8 Then 'Èç¹ûÒÆÎ»Î»Êý´óÓÚ8£¬ÄÇôÏÈÓÒÒÆ8룬ÔڰѵÍ×Ö½ÚÓÒÒÆÊ£ÏµÄλÊý
 m_aBytesInInt(0) = m_aBytesInInt(1)
 m_aBytesInInt(1) = 0
 m_aBytesInInt(0) = g_aShRB(m_aBytesInInt(0), BitNum - 8)
 Else 'СÓÚ8
 'µÍ×Ö½ÚÓÒÒÆ£¬²¢°Ñ¸ß×Ö½ÚÏàÓ¦µÄÎ»ÒÆ¶¯µ½µÍ×Ö½Ú
 m_aBytesInInt(0) = g_aShRB(m_aBytesInInt(0), BitNum) Or g_aShLB(m_aBytesInInt(1), 8 - BitNum)
 '¸ß×Ö½ÚÓÒÒÆ
 m_aBytesInInt(1) = g_aShRB(m_aBytesInInt(1), BitNum)
 
 End If
 ShR16_Internal = m_iSharedIntEnd Function
 Private Function ShiftLeftTableIsInitialized() As Boolean
 'ÅжÏ×óÒÆ±íÊÇ·ñÒѾ³õʼ»¯¹ýµÄº¯Êý£¬³õʼ»¯¹ý·µ»ØÕ棬ûÓгõʼ»¯·µ»Ø¼Ù
 On Error GoTo handler
 g_aShL16(1, 1) = g_aShL16(1, 1)ShiftLeftTableIsInitialized = True
 Exit Function
 handler:
 ShiftLeftTableIsInitialized = False
 End Function
 Private Function ShiftRightTableIsInitialized() As Boolean'ÅжÏÓÒÒÆ±íÊÇ·ñÒѾ³õʼ»¯¹ýµÄº¯Êý£¬³õʼ»¯¹ý·µ»ØÕ棬·ñÔò·µ»Ø¼Ù
 On Error GoTo handler
 g_aShR16(1, 1) = g_aShR16(1, 1)ShiftRightTableIsInitialized = True
 Exit Function
 handler:ShiftRightTableIsInitialized = False
 End Function-----------------------------------------------------------------
 
 |