搞到一个CRC校验的VB+汇编的代码,非常简单。可看不懂,不会用。那位能看懂?
'**** 代码开始 ****
Private Declare Function CallWindowProc Lib "user32 " Alias "CallWindowProcA " (ByVal lpPrevWndFunc As Long, _
ByVal hwnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private Function AsmCrc(bytInput() As Byte, ByVal Init As Long) As Long
Dim Asm(5) As Long
Asm(0) = &H5B5A5958
Asm(1) = &HC033505E
Asm(2) = &H3018A36
Asm(3) = &H41CED1F0
Asm(4) = &HF47ECA3B
Asm(5) = &HC3338936
CallWindowProc VarPtr(Asm(0)), _
VarPtr(bytInput(LBound(bytInput))), _
VarPtr(bytInput(UBound(bytInput))), _
VarPtr(AsmCrc), _
Init
End Function
'**** 没有了 ****
没有使用方法的代码。
我试着写了一个,不知道这么用对不对:
Private Sub Command1_Click()
Dim myBAry() As Byte
Dim myL As Long
myBAry = StrConv(Text1.Text, vbFromUnicode)
myL = AsmCrc(myBAry, Len(Text1.Text))
Debug.Print "字符串“ " & Text1.Text & "”的CRC校验: " & myL
End Sub
如果把 AsmCrc 的 Init 参数设定成其他的长整数,AsmCrc 的返回值也发生变化。
哪位知道用法?
[解决办法]
ByVal Init As Long应该是初始值
如果只调用一次AsmCrc,应该Init =0
如果循环调用,可能是下面这么用
dim lngInit as long,lngResult as long
dim i as long
dim inputdata() as byte
lngInit=0
for i=0 to ...
getdata(inputdata)
lngResult=AsmCrc(inputdata,lngInit)
lngInit=lngResult
next
debug.? lngResult
猜的,呵呵
[解决办法]
我怎么看了半天觉得这不是个CRC校验得函数啊,你们看看这里:
http://www.w3sky.com/2/2320.html
函数功能:该函数CallWindowProc将消息信息传送给指定的窗口过程。
函数原型:LRESULT CallWindowProc(WNDPROC lpPrevWndFunc,HWND hWnd.UINT Msg,WPARAM wParam,LPARAMIParam);
参数:
lpPrevWndFunc:指向前一个窗口过程的指针。如果该值是通过调用GetWindowLong函数,并将该函数中的nlndex参数设为GWL_WNDPROC或DWL_DLGPROC而得到的,那么它实际上要么是窗口或者对话框的地址,要么就是代表该地址的句柄。
hWnd:指向接收消息的窗口过程的句柄。
Msg:指定消息类型。
wParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关。
IParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关。
返回值:返回值指定了消息处理结果,它与发送的消息有关
备注:使用函数CallWindowsProc可进行窗口子分类。通常来说,同一类的所有窗口共享一个窗口过程。子类是一个窗口或者相同类的一套窗口,在其消息被传送到该类的窗口过程之前,这些消息是由另一个窗口过程进行解释和处理的。