0

.Net 4.0およびVS2010でC#を使用しており、(同じベンダーの)管理されていないサードパーティのDLLをいくつか使用しています。DLLは、ファイルからバイトの配列を処理し、ロジックを実行して、新しいものを返します。これはファイルの約80%で機能しますが、残りはアプリケーションをクラッシュさせます。これは同じファイルで再現可能です。例外は次のとおりです。

System.AccessViolationException保護されたメモリの読み取りまたは書き込みを試みました。これは多くの場合、他のメモリが破損していることを示しています。

この行でクラッシュします:

oPages = _penReq.Pages;

これは、同じDLLを呼び出して同じファイルを処理する古いバージョンのソフトウェア(2008年頃から)では発生しません。これを構成ファイルに追加しました:

<legacyNullReferenceExceptionPolicy enabled = "1"/>

これを追加すると、プログラムはクラッシュしません(問題の行の周りにtry-catchがあります)が、もちろんoPagesはnullになります。

これはサードパーティのアンマネージDLLであるため、このベンダーに連絡せずに得ることができるヘルプは非常に限られています(これは非常に困難です)が、この同じコードとDLLが古いバージョンのソフトウェアで動作することを考えると、説明がありますまたは可能な解決策?

これをもう少し面白くするために、Server 2003 32ビットマシンでクラッシュするファイルの約25%が、Win764ビットマシンで正常に処理されます。

ありがとう。

アップデート

コードをよく見てみましょう。

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 over 1.1 には新しいセキュリティ機能があり、管理されていないファイルとリソースを使用する前に完全に信頼する必要があります。dll とそれが使用するすべてのリソースが完全に信頼されているだけでなく、完全なアクセス権を持っている必要があります。

于 2012-07-16T15:31:32.937 に答える