第三方DLL与System.AccessViolationException(受保护的内存)崩溃

时间:2012-07-16 14:02:35

标签: c# .net dll nullreferenceexception

我在.Net 4.0和VS2010中使用C#而我正在使用一些非托管第三方DLL(来自相同的供应商)。 DLL从文件处理一个字节数组,执行它们的逻辑,并返回一些新的东西。这适用于大约80%的文件,但其余文件使应用程序崩溃。这可以使用相同的文件重现。例外是:

System.AccessViolationException 尝试读取或写入受保护的内存。这通常表明其他内存已损坏。

它在这一行崩溃了:

oPages = _penReq.Pages;

旧版本的软件(从大约2008年开始)调用相同的DLL并处理相同的文件时,不会发生这种情况。我已将此添加到配置文件中:

<legacyNullReferenceExceptionPolicy enabled = "1"/>

添加了这个程序后,程序不会崩溃(问题行周围有一个try-catch)但当然oPages是空的。

我意识到这是第三方非托管DLL,所以在没有联系这个供应商的情况下我可以得到很多帮助(这非常困难),但是考虑到这个相同的代码和DLL可以与我们软件的旧版本一起使用,有解释或可能的解决方案吗?

为了使这更有趣,我们的Win3 64位计算机上成功处理了大约25%在我们的Server 2003 32位机器上崩溃的文件。

感谢。

更新

以下是对代码的更好看:

byte[] inkBytes = Data;   //produces an array of Bytes
Vendor.Service.PenRequest _penReq = new Vendor.Service.PenRequest();
_penReq.Initialize(Data);
_penId = _penReq.PenId;  //returns a string with an ID.  Confirmed working.
Vendor.Service.RequestPages oPages = _penReq.Pages; //returns list of pages.  Not working

1 个答案:

答案 0 :(得分:0)

Dot Net 2.0 1.1版中有一项新的安全功能,要求您在使用非托管文件和资源之前完全信任它们。确保dll及其使用的任何资源必须具有完全访问权限,并且完全可信。