觅风十五年风雨与你同舟共济

[源码] 扫描仪之数码设备支持库内存泄漏导致无法继续使用解决源码

[复制链接]

微信扫一扫 分享朋友圈

476572199 发表于 2025-3-7 09:14:34 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

马上注册,结交更多易友,享用更多功能,让你轻松玩转觅风论坛。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题:当你连续扫描时,会导致你的应用程序内存暴增,一张图涨大约50M,过不了4 50张图,内存就不足,就会报错中断,很是恼火。
解决办法:
就想着自己重新写一个twain_32.dll的支持库吧,查阅到twain标准是英文版,又到处找翻译软件翻译了全文,我会把协议全文附在后边,以及C语言twain.h头文件(里边有各种参数详细值)。
废话就不多说了,反正是花了我很长很长的时间。最终的解决方案就是,用觅风模块中的类_APIHOOK,函数,可以在应用程序点击扫描后安装HOOK,也可以开局就安装,APIHOOK.安装 (“twain_32.dll”, “DSM_Entry”, &新DSM_Entry),在新的DSM_Entry()入口函数里干2件事,一是拦截取图的三元组合
#DG_IMAGE / #DAT_IMAGENATIVEXFER / #MSG_GET,当拦截到常量#DAT_IMAGENATIVEXFER(也就是260)时,就记录下pData的指针,这个指针就是扫描仪源返回的全局DIB内存位置,等我们用完要释放的,在事件子程序(“图片传送完毕”)中的最后来释放。第二件事就是要返回正常的DSM_Entry()操作,不然后续步骤会执行不下去。
支持库因为不知道应用程序什么时候调用完这个图片数据,所以没有进行释放,所也也不怪他,但是他应该在支持库里应该记录下这些内存块,当用户调用完一次就释放一次。







游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

精彩评论15

5555 发表于 2025-3-8 17:09:45 | 显示全部楼层
的法国风格化规范化
回复 支持 反对

使用道具 举报

凌空 发表于 2025-3-10 01:04:56 | 显示全部楼层
谢谢分享,下载测试
回复 支持 反对

使用道具 举报

雨点 发表于 2025-3-11 09:00:07 | 显示全部楼层
看看,到底好不好,想学学看看
回复 支持 反对

使用道具 举报

5555 发表于 2025-3-12 16:55:18 | 显示全部楼层
学习了,这就去试试
回复 支持 反对

使用道具 举报

大米 发表于 2025-3-14 00:50:28 | 显示全部楼层
不错哦  喜欢 嘿嘿
回复 支持 反对

使用道具 举报

qwe144184 发表于 2025-3-16 02:03:19 | 显示全部楼层
豆腐干士大夫
回复 支持 反对

使用道具 举报

萨拉空军司令的 发表于 2025-3-18 03:16:10 | 显示全部楼层
的法国风格化规范化
回复 支持 反对

使用道具 举报

1378409920 发表于 2025-3-20 04:29:01 | 显示全部楼层
不错哦  喜欢 嘿嘿
回复 支持 反对

使用道具 举报

企鹅6655 发表于 2025-3-22 05:41:53 | 显示全部楼层
碉堡了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注我们:觅风论坛与你快乐分享

收藏本站

用心服务做个非盈利公益编程网站

www.eyyba.com

服务人:觅风论坛

Email:eyyba@foxmail.com

Powered by WWW.EYYBA.COM X3.4© 2001-2023 Inc.   版权所有   

觅风论坛  疆ICP备15020893号-1