大家好:
    我编译了一个基于TWAIN标准支持扫描仪的DLL,使用静态链接MFC方式编译。到目前为止,大部分扫描仪能够支持,前两天发现不能正常操作紫光B600+,修改程序后,能在VC里面使用CTRL+F5正常操作扫描仪(紫光B600+)了,但是直接在应用程序可执行文件不能正常操作,通过输出日志发现,程序卡在了DLL释放扫描仪的时候,表现形式为CPU占用90+,此接口函数也没有任何返回。之后我尝试把执行文件整个目录安装在另外两台机器(两台操作系统都是WIN XP SP3,但是有一台是克隆版本)上,其中一台能正常运行,另外一台(克隆版本操作系统)与我本机表现形式一样,望大家帮助解决,3Q。

解决方案 »

  1.   

    twRC = CallDSMEntry(&appID,
    NULL,
    DG_CONTROL,
    DAT_IDENTITY,
    MSG_CLOSEDS,
    &dsID); //就是这个地方释放扫描资源
    TW_UINT16 CTWAIN::CallDSMEntry(pTW_IDENTITY pApp, pTW_IDENTITY pSrc, TW_UINT32 DG, TW_UINT16 DAT, TW_UINT16 MSG, TW_MEMREF pData)
    { TW_UINT16 twRC = (*this->pDSMEntryProc)(pApp, pSrc, DG, DAT, MSG, pData);//卡住,CPU占用90%+

    return twRC;
    }
      

  2.   

    那是不是你打包时有的dll没有呀
      

  3.   

    确实是没有打包安装,但是所需的DLL、资源应该没有缺少,因为我把同一份文件夹拷贝到两个电脑上,一个可以,一个不行啊
      

  4.   

    可能和环境有关,联系DLL的提供商
      

  5.   

    估计还是程序BUG,貌似有死循环?直接在代码
     
      W_UINT16 twRC = (*this->pDSMEntryProc)(pApp, pSrc, DG, DAT, MSG, pData);//卡住,CPU占用90% 处设置断点跟踪进去看看
      

  6.   

    to gameslq
    :我前面说明了 在VC下面DUBUG是正常的,能正常调用
      

  7.   

      W_UINT16 twRC = (*this->pDSMEntryProc)(pApp, pSrc, DG, DAT, MSG, pData);//卡住,CPU占用90% 而且这个是接口函数  无法在继续跟踪了
      

  8.   

    把代码复制下来 重新建立工程 再TEST TRY