首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

搞到一个CRC校验的VB+汇编的代码,非常简单。可看不懂,不会用。那位能看懂?该怎么解决

2012-01-24 
搞到一个CRC校验的VB+汇编的代码,非常简单。可看不懂,不会用。那位能看懂?****代码开始****PrivateDeclareFu

搞到一个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可进行窗口子分类。通常来说,同一类的所有窗口共享一个窗口过程。子类是一个窗口或者相同类的一套窗口,在其消息被传送到该类的窗口过程之前,这些消息是由另一个窗口过程进行解释和处理的。

热点排行