我在.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
答案 0 :(得分:0)
Dot Net 2.0 1.1版中有一项新的安全功能,要求您在使用非托管文件和资源之前完全信任它们。确保dll及其使用的任何资源必须具有完全访问权限,并且完全可信。