.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