2011-05-09 222 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

第一次机会异常并不总是一个错误。第一次机会异常是您正在调试的代码第一次抛出异常。如果你的代码处理异常,那么所有这些都是通知你发生了异常。

例如,我可能有代码尝试查找具有特定名称的文件,如果找到,会执行某些操作。如果文件名不存在,则抛出异常,我将处理并执行其他操作。所以,虽然发生异常,但它是预期的行为并由代码处理。

如果您有第二次机会异常通知,这意味着您的代码实际上不处理抛出的异常。那时候,你会想看看发生了什么。你是否只是重新抛出异常来获取更高级别的代码,或者你是否完全忽略它。

相关问题