0

我在 .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
4

1 回答 1

0

Dot Net 2.0 比 1.1 有一个新的安全功能,要求您完全信任非托管文件和资源,然后才能使用它们。确保 dll 和它使用的任何资源必须具有完全访问权限并且它们是完全受信任的。

于 2012-07-16T15:31:32.937 回答