Twain_32关闭连接时报错

我是个不努力的小菜 2020-03-24 11:51:58
步骤:
1.初始化
2.打开Source Marager TwRC rc = DSMparent(appid, IntPtr.Zero, TwDG.Control, TwDAT.Parent, TwMSG.OpenDSM, ref hwndp);
3.选择默认的扫描仪 rc = DSMident(appid, IntPtr.Zero, TwDG.Control, TwDAT.Identity, TwMSG.GetDefault, srcds)
4.打开source rc = DSMident(appid, IntPtr.Zero, TwDG.Control, TwDAT.Identity, TwMSG.OpenDS, srcds);
5.....
6.关闭 source rc = DSMident(appid, IntPtr.Zero, TwDG.Control, TwDAT.Identity, TwMSG.CloseDS, srcds);
7.关闭Source Marager rc = DSMparent(appid, IntPtr.Zero, TwDG.Control, TwDAT.Parent, TwMSG.CloseDSM, ref hwnd);

就是在第6步的时候 报错,“提示 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”。各个大佬们 帮忙看看 分析分析什么原因
...全文
1826 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2020-07-14
  • 打赏
  • 举报
回复
调用非托管代码需要注意GC,尤其是有回调方法的调用。所以一个能解决问题的经验方法(不一定是标准回答,但能解决问题)那就是回调和调用规定都写成静态static,这样不会因为gc释放造成指针飞掉的情况。
正怒月神 2020-07-14
  • 打赏
  • 举报
回复
我分享一下,java版本的。 希望对你有用。 https://blog.csdn.net/hanjun0612/article/details/99682621
正怒月神 2020-07-14
  • 打赏
  • 举报
回复
可惜,当时我用java开发的。 爱莫能助啊。
weixin_45865627 2020-07-13
  • 打赏
  • 举报
回复
判断一下rc结果

TwUserInterface guif = new TwUserInterface();
rc = DSuserif(appid, srcds, TwDG.Control, TwDAT.UserInterface, TwMSG.DisableDS, guif);
if (rc == TwRC.Success)
{
     rc = DSMident(appid, IntPtr.Zero, TwDG.Control, TwDAT.Identity, TwMSG.CloseDS, srcds);
}
耗子哭死猫 2020-07-13
  • 打赏
  • 举报
回复
创建一个对象,不要一直new新对象。这个对象用的,你new又关闭。
threenewbee 2020-07-13
  • 打赏
  • 举报
回复
相机或者扫描仪重新连接下,不行就重新启动一下。
  • 打赏
  • 举报
回复
顶起来,不能沉
  • 打赏
  • 举报
回复
顶起来,不能沉啊啊 啊

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧