c#调用DLL报错:attempted to read or write protected memory。急!急!急!

jiangchunfeng 2010-11-09 03:02:57
我调用的DLL是一个二代身份证读卡器的DLL,我在一个窗体中引用这个DLL(DllImport方式),第一次打开窗体读卡没问题,当我退出该窗体返回到父窗体并再次打开该窗体读卡时就会报错,这个DLL读卡函数原型:public static extern int CVR_Read_Content(int Active);
我窗体调用是用using方式,请哪位高手指点下是怎么回事,谢谢!
...全文
428 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
piaomiaoguhun 2011-03-03
  • 打赏
  • 举报
回复
大侠,是怎么搞定的啊?
mjp1234airen4385 2010-11-10
  • 打赏
  • 举报
回复
打开以后,退出窗体的时候,注意关闭读卡器。
k0mmDu 2010-11-10
  • 打赏
  • 举报
回复
不是说用了using括起来就会自动释放资源
using()
{
//
}在执行完花括号中的语句后会调用你using的资源的Dispose(bool disposing)方法来释放资源
这也就是为什么使用using必须要实现Idispose()接口的原因.
你在窗口中使用了dllimport引用了非托管资源,但是没有修改窗口的Dispose(bool disposing)方法来释放.第二次调用就有可能出错.
jiangchunfeng 2010-11-10
  • 打赏
  • 举报
回复
自己搞定了,谢谢各位,结贴给分!
jiangchunfeng 2010-11-09
  • 打赏
  • 举报
回复
错误就是在读卡那个函数,返回值是个int类型的,其他没有什么操作呀,窗体关闭后不是自动释放资源吗?
还有3楼说的不用DLLImport方式引用,这个DLL不能直接添加引用,还有其它方式引用吗?
莫名其 2010-11-09
  • 打赏
  • 举报
回复
支持二楼
另建议换个引用方式,这种异常也可能是DllImport引用方式带来的
k0mmDu 2010-11-09
  • 打赏
  • 举报
回复
窗口资源没有释放吧
看看有什么要手动释放的资源,写在窗口的Dispose(bool disposing)方法里面

110,548

社区成员

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

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

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