巨蚂蚁 2014-08-25 08:40
浏览 1268

VB 调用crc16校验 dll 返回值不正确

真诚求助,其实什么都写好了就是关键时候掉链子了
如下:
C语言写的CRC16 半字节查表 方式校验,dll cpp 程序如下:
unsigned short _stdcall CalCRC16(unsigned char *ptr, unsigned char len)

{

unsigned short crc;

unsigned char da;

unsigned short crc_ta[16]={

0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,

0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef

};

crc =0xFFFF;   
while(len--!=0)    
{   
    da = ((unsigned char)(crc/256))/16;          
    crc<<=4;                                     

crc^=crc_ta[da^(*ptr/16)];

da = ((unsigned char)(crc/256))/16;

crc<<=4;

crc^=crc_ta[da^(*ptr&0x0f)];

ptr++;

}

return(crc);

}

程序没有错误,单独调试OK,单独用函数 输入数组{0xAB,0x05,0x0A}也能返回正确的校验码DF4E

我用VB调用此dll
程序如下:
Private Declare Function CalCRC16 Lib "C:\CRC16.dll\crc16.dll" (ByRef buf() As Byte, ByVal nLen As Long) As Long
Private Sub Command1_Click()
Dim buf(0 To 2) As Byte
buf(0) = &HAB
buf(1) = &H5
buf(2) = &HA
lngCRC = CalCRC16(buf, 3)
Debug.Print Hex(lngCRC)
End Sub
编译OK,但返回值不正确,不知道那里错了,那位大神能告知,不胜感激

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 matlab(相关搜索:紧聚焦)
    • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
    • ¥15 路易威登官网 里边的参数逆向
    • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
    • ¥50 需求一个up主付费课程
    • ¥20 模型在y分布之外的数据上预测能力不好如何解决
    • ¥15 processing提取音乐节奏
    • ¥15 gg加速器加速游戏时,提示不是x86架构
    • ¥15 python按要求编写程序
    • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入