2011-05-09 216 views
1

我有一個基本的WinForms應用程序。我正在調用它產生以下異常外部API:C#WinForms異常:類型'System.AccessViolationException'的第一次機會異常

Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

A first chance exception of type 'System.AccessViolationException' occurred in UavController.exe

調用看起來是這樣的:

outputBroker.SelectedObjectPaths.AddWithID(((AgAircraft)aircraft).Path, ((AgAircraft)aircraft).InstanceName);

我不能找到任何問題的跡象。

+1

該錯誤在您與外部API交互的某處。除了確保不傳遞任何空引用的API之外,沒有太多的建議可以提供給您的信息。 – Gabe 2011-05-09 04:43:24

+1

@Gabe - 檢查空引用 - 不是問題。我開始認爲這與我通過out-proc COM與第三方應用程序接口有關。 – wulfgarpro 2011-05-09 05:12:25

+0

一個'AccessViolationException'不能發生在純粹的託管代碼中,所以問題必須在與第三方應用程序接口。 – Gabe 2011-05-09 05:19:25

回答

2

該問題是由您的API生成的。要麼通過您的調用將錯誤的數據傳遞給API,要麼您的API本身存在問題。這裏是一個微軟的鏈接,可以幫助你,如果你有機會獲得你的API代碼:

http://msdn.microsoft.com/en-us/library/ms164911(v=vs.80).aspx

否則,我認爲你可能需要使用您的API提供商合作,以找出問題是什麼,如何解決它。

+0

謝謝,供應商的電子郵件已經開始! – wulfgarpro 2011-05-09 05:13:08

+0

@WulfgarPro - 歡樂時光。很高興我能幫上忙。 – IAmTimCorey 2011-05-09 05:16:08

0

第一次機會異常並不總是一個錯誤。第一次機會異常是您正在調試的代碼第一次拋出異常。如果你的代碼處理異常,那麼所有這些都是通知你發生了異常。

例如,我可能有代碼嘗試查找具有特定名稱的文件,如果找到,會執行某些操作。如果文件名不存在,則拋出異常,我將處理並執行其他操作。所以,雖然發生異常,但它是預期的行爲並由代碼處理。

如果您有第二次機會異常通知,這意味着您的代碼實際上不處理拋出的異常。那時候,你會想看看發生了什麼。你是否只是重新拋出異常來獲取更高級別的代碼,或者你是否完全忽略它。

相關問題