VB如何调用 用VC++写的CRC16的DLL

lable_asp 2010-12-27 03:07:43
Private Declare Function CRC16 Lib "CRC16" (ByRef puchMsg As Byte, ByVal usDataLen As Integer) As Long


声明了 但是我下面怎么写都提示错误。

CRC16是我用同事给的代码直接封装成DLL的,无错误。

我要通过DLL 计算出校验码 (2字节),然后在放到数组中发送。

求大神帮下忙
...全文
154 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
笨狗先飞 2010-12-28
  • 打赏
  • 举报
回复
直接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

zzhgb 2010-12-28
  • 打赏
  • 举报
回复
45264117@qq.com
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zzhgb 的回复:]

dll发过来,我写给你
[/Quote]

留个邮箱
咸清 2010-12-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 veron_04 的回复:]
注册一下这个动态链接库,在引用它,在标准模块中添加声明(声明一定要正确)即可使用了。
[/Quote]
如果不能注册的话,其实是可以用
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
of123 2010-12-28
  • 打赏
  • 举报
回复
提示什么错误?

Private Declare Function CRC16 Lib "CRC16" (ByRef puchMsg As Byte, ByVal usDataLen As Integer) As Long

Dim lngCrc As Long, bytMess(65535) As Byte, intLen As Integer, i As Integer

......

lngCrc = CRC16(bytMess(0), intLen)
dafu2003 2010-12-27
  • 打赏
  • 举报
回复
关键是要搞清楚这个函数crc16在c里是如何定义的,所以你应该把在C语言里这个函数的定义告诉你要问的人,而不是在vb里你的这个定义。
zzhgb 2010-12-27
  • 打赏
  • 举报
回复
dll发过来,我写给你
贝隆 2010-12-27
  • 打赏
  • 举报
回复
注册一下这个动态链接库,在引用它,在标准模块中添加声明(声明一定要正确)即可使用了。
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yorkness 的回复:]

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

VB编译器直接崩溃
yorkness 2010-12-27
  • 打赏
  • 举报
回复
在vb中的话是可以直接调用c写的DLL的,而现在你不能调用很可能是调用方法错了。
不知道你现在提示的是什么错误

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧