(原)解决精伦iDR200 SDK在.NET开发环境中提示"尝试读取或写入受保护的内存"错误

场景:

开发环境
 WindowsXP Sp3 简体中文
        VisualStudio 2005 中文 SP1       
接口版本
        Sdtaip.dll  Version  2006年11月15日, 9:34:36
        WltRS.dll   Version  2006年11月15日, 9:34:36
此例程在VB下运行正常,通过VS2005升级工具自动升级到VB.net后,第一次运行正常,第二次运行后在获取身份证信息后出现出现附件中错误。

解决过程:

   经实验:1、代码在VB项目下没有问题,但转到C#下即出现错误。

             2、考虑可能变量声明长度、类型等与VB不同,于是转到VB.net,同样出现错误。

             3、将SDK重新使用VB封装成OCX然后使用,VB.net,C#调用依然有错误。

             4、偶然一次看到VB原始例子中把照片加载项注释掉了,于是尝试不加载图片,OK不再报错了。

             5、检查在.net加载图片和不加载图片时图片文件的状态,分别不占用和不占用,找到问题所在了,VB与.net加载图片的方式不同,VB加载完成即释放,但.NET始终占用,这个应该是开发工具的机制不同。

最终解决办法:(参考:GDI+中发生一般性错误” 的终极解决办法,没找到最原始出处

             Bitmap bmp = new Bitmap("photo.bmp");
             Bitmap bmp2 = new Bitmap(102, 126,System.Drawing.Imaging.PixelFormat.Format24bppRgb);
             Graphics draw = Graphics.FromImage(bmp2);
             draw.DrawImage(bmp, 0, 0);
             pEditIDCard.Image = (Image)bmp2;
             draw.Dispose();
             bmp.Dispose();

至此开发完成。

感谢精伦技术部、市场部各位朋友的支持!

     

原文地址:https://www.cnblogs.com/spymaster/p/1251952.html