解决方案 »

  1.   

    检查下dll函数原型是否正确。
      

  2.   

    @Carlven2012这个问题在调试的时候也会出现,有函数第一次运行没有出现,但是运行一次之后又会出现,有的函数就会一直出现,我不知道我的回调函数是不是多线程的,麻烦你帮我看看。回到函数是用vc6写的
    回调函数:
    int CALLBACK EnumSearchProc(PDS_INFO dsinfo)
    {
    if (dsinfo == NULL)
    return true; SearchInfo[search_count].dshdl = -1;
    if (dsinfo->hwid == NE4100T) {
    printf("Found: NE4100T\n");
    memcpy(&SearchInfo[search_count].ds_info, dsinfo, sizeof(DS_INFO));
    search_count++;
    }else if (dsinfo->hwid == NE4110S) {
    printf("Found: NE4110S\n");
    memcpy(&SearchInfo[search_count].ds_info, dsinfo, sizeof(DS_INFO));
    search_count++;
    }else if (dsinfo->hwid == NE4110A) {
    printf("Found: NE4110A\n");
    memcpy(&SearchInfo[search_count].ds_info, dsinfo, sizeof(DS_INFO));
    search_count++;
    }else if (dsinfo->hwid == NE4120S) {
    printf("Found: NE4120S\n");
    memcpy(&SearchInfo[search_count].ds_info, dsinfo, sizeof(DS_INFO));
    search_count++;
    }else if (dsinfo->hwid == NE4120A) {
    printf("Found: NE4120A\n");
    memcpy(&SearchInfo[search_count].ds_info, dsinfo, sizeof(DS_INFO));
    search_count++;
    }else if (dsinfo->hwid == WE2100T_US) {
    printf("Found: WE2100T_US\n");
    memcpy(&SearchInfo[search_count].ds_info, dsinfo, sizeof(DS_INFO));
    search_count++;
    }else if (dsinfo->hwid == WE2100T_EU) {
    printf("Found: WE2100T_EU\n");
    memcpy(&SearchInfo[search_count].ds_info, dsinfo, sizeof(DS_INFO));
    search_count++;
    }else if (dsinfo->hwid == WE2100T_JP) {
    printf("Found: WE2100T_JP\n");
    memcpy(&SearchInfo[search_count].ds_info, dsinfo, sizeof(DS_INFO));
    search_count++;
    } return true;
    }
      

  3.   

    @caozhydll函数原型是正确的,因为在vc6里面已经可以运行
      

  4.   

    VB 的数据类型与 VC++ 是不同的。函数声明时数据类型错误引起的内存不可读异常的情况是有的。
      

  5.   

    我发现你的问题所在了:
    For.....Next里面用了回调函数,而且这函数里面用了memcpy, 百分百要遇到内存读写错误,跑不掉的。 
    就相当于For....Next里面加了一个DoEvents,当第一个循环还在执行时,第二个、第三个循环就又开始执行起来了,机器忙不过来,就很容易冲突,就挂了。我以前就遇到过这样的问题。
      

  6.   

    我已经把VC中的数据类型转化为对应的VB数据类型了
      

  7.   


    for .... next 里面不要用回调函数,或者另想个办法吧。至少要按这个思路走: 内存读写操作要一个一个地进行,即第一个操作执行完毕了,才能再执行第二个,不然内存地址变化了,就极容易出现内存读取错误,或是写入错误。