我在 .Net 4.0 和 VS2010 中使用 C#,并且使用了一些非托管的 3rd 方 DLL(来自同一供应商)。DLL 处理文件中的字节数组,执行它们的逻辑,并返回一些新的东西。这适用于大约 80% 的文件,但其余文件会使应用程序崩溃。这可以用相同的文件重现。例外是:
System.AccessViolationException 试图读取或写入受保护的内存。这通常表明其他内存已损坏。
它在这条线上崩溃:
oPages = _penReq.Pages;
旧版本的软件(大约从 2008 年开始)调用相同的 DLL 并处理相同的文件不会发生这种情况。我已将此添加到配置文件中:
<legacyNullReferenceExceptionPolicy enabled = "1"/>
添加后,程序不会崩溃(在问题行周围有一个 try-catch),但当然 oPages 为空。
我意识到这是一个第 3 方非托管 DLL,因此我只能在不联系该供应商的情况下获得这么多帮助(这非常困难),但考虑到相同的代码和 DLL 可以与我们的旧版本软件一起使用,是否有解释或可能的解决方案?
为了让这更有趣,在我们的 Server 2003 32 位机器上崩溃的文件中约有 25% 在我的 Win7 64 位机器上成功处理。
谢谢。
更新
下面是更好地查看代码:
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