本帖最后由 lable_asp 于 2010-12-27 15:10:50 编辑

解决方案 »

  1.   

    在vb中的话是可以直接调用c写的DLL的,而现在你不能调用很可能是调用方法错了。
    不知道你现在提示的是什么错误
      

  2.   

    关键是要搞清楚这个函数crc16在c里是如何定义的,所以你应该把在C语言里这个函数的定义告诉你要问的人,而不是在vb里你的这个定义。
      

  3.   

    提示什么错误?Private Declare Function CRC16 Lib "CRC16" (ByRef puchMsg As Byte, ByVal usDataLen As Integer) As LongDim lngCrc As Long, bytMess(65535) As Byte, intLen As Integer, i As Integer......lngCrc = CRC16(bytMess(0), intLen)
      

  4.   

    如果不能注册的话,其实是可以用
    Private Declare Function CRC16 Lib "CRC16" (ByRef puchMsg As Byte, ByVal usDataLen As Integer) As Long
    直接引用后使用的,关键是
    Private Declare Function CRC16 Lib "CRC16" (ByRef puchMsg As Byte, ByVal usDataLen As Integer) As Long
    这个dll要和可执行文件同一目录,或者在红色部分用绝对路径,如:c:\CRC16.dll
      

  5.   

    直接VB写一个算了'=================================
    '名称   CRC16
    '参数   Data    Byte()  数据内容
    '       Length  Integer 计算长度,默认值 1
    '返回   Byte()
    '类型   Private Function
    '说明   计算CRC16值
    '日期   2007-03-09
    '       2007-03-15  修改Length判断
    '=================================
    Private Function CRC16(Data() As Byte, Optional ByVal Offset As Integer = 0, Optional ByVal Length As Integer = 0) As Byte()
      Dim CRC16Lo As Byte, CRC16Hi As Byte      'CRC寄存器
      Dim CL As Byte, CH As Byte                '多项式码&HA001
      Dim SaveHi As Byte, SaveLo As Byte
      Dim I As Integer
      Dim Flag As Integer
      Dim ReturnData(1) As Byte
      CRC16Lo = &HFF
      CRC16Hi = &HFF
      CL = &H1
      CH = &HA0
      Length = IIf(Length < 1, UBound(Data) - Offset, Length - 1)   'Update 2007-03-15
      For I = Offset To Offset + Length
        CRC16Lo = CRC16Lo Xor Data(I) '每一个数据与CRC寄存器进行异或
        For Flag = 0 To 7
          SaveHi = CRC16Hi
          SaveLo = CRC16Lo
          CRC16Hi = CRC16Hi \ 2            '高位右移一位
          CRC16Lo = CRC16Lo \ 2            '低位右移一位
          If ((SaveHi And &H1) = &H1) Then '如果高位字节最后一位为1
            CRC16Lo = CRC16Lo Or &H80      '则低位字节右移后前面补1
          End If                           '否则自动补0
          If ((SaveLo And &H1) = &H1) Then '如果LSB为1,则与多项式码进行异或
            CRC16Hi = CRC16Hi Xor CH
            CRC16Lo = CRC16Lo Xor CL
          End If
        Next
      Next
      ReturnData(0) = CRC16Lo              'CRC低位
      ReturnData(1) = CRC16Hi              'CRC高位
      CRC16 = ReturnData
    End Function
      

  6.   

    vb调用dll得到文件crc16:http://download.csdn.net/source/2944848