»áÔ±£º ÃÜÂ룺 ¡¡Ãâ·Ñ×¢²á | Íü¼ÇÃÜÂë | »áÔ±µÇ¼ ÍøÒ³¹¦ÄÜ£º ¼ÓÈëÊÕ²Ø ÉèΪÊ×Ò³ ÍøÕ¾ËÑË÷  
¼¼ÊõÎĵµ > VBÎĵµ > APIº¯Êý
ÇÉÓÃAPIº¯ÊýÔöÇ¿VBλ²Ù×÷¹¦ÄÜ
·¢±íÈÕÆÚ£º2005-09-15 16:15:13×÷ÕߣºÁ ³ö´¦£º  

ÕªÒª£º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, 1
CopyMemory 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, 2
CopyMemory 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 BitsNum
    Byt = 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 BitsNum
    Byt = 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 Function
Private 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 BitsNum
    Word = 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 BitsNum
    Word = ShRW_By1Bit(Word)
Next i

ShRW = Word
End 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 BitsNum
    DWord = 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 BitsNum
    DWord = ShRD_By1Bit(DWord)
Next i

ShRD = DWord
End 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 ÓïÑÔÖÐµÄ NULL
CopyMemory 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) = HiByte
m_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) = HiWord
m_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 = Word
fastLo = 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_BYTE
    For 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-15
For 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 Function
Private 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_iSharedInt
End 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
-----------------------------------------------------------------

¡¾·µ»Ø¶¥²¿¡¿ ¡¾´òÓ¡±¾Ò³¡¿ ¡¾¹Ø±Õ´°¿Ú¡¿

¹ØÓÚÎÒÃÇ / ¸øÎÒÁôÑÔ / °æÈ¨¾Ù±¨ / Òâ¼û½¨Òé / ÍøÕ¾±à³ÌQQȺ   
Copyright ©2003- 2025 Lihuasoft.net webmaster(at)lihuasoft.net ¼ÓÔØÊ±¼ä 0.00358