巨蚂蚁 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条回答

    报告相同问题?

    悬赏问题

    • ¥20 关于#硬件工程#的问题,请各位专家解答!
    • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
    • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
    • ¥30 截图中的mathematics程序转换成matlab
    • ¥15 动力学代码报错,维度不匹配
    • ¥15 Power query添加列问题
    • ¥50 Kubernetes&Fission&Eleasticsearch
    • ¥15 報錯:Person is not mapped,如何解決?
    • ¥15 c++头文件不能识别CDialog
    • ¥15 Excel发现不可读取的内容