我正在处理的VB.NET应用程序中存在内存访问异常的问题。我希望能在这里获得一些见解,因为我所做的研究都没有帮助我找到问题。
背景
我正在将许多应用程序从VB6转换为.NET 4.0。在客户端的请求下,我正在进行直接转换,并且只在必要时进行重构,以避免在转换时将其他问题注入代码中。大多数应用程序都是在任何CPU模式下编译的,但由于依赖32位PLC软件或较旧的硬件驱动程序,有些应用程序必须编译为x86。我的开发机器是Windows 7 64位。
问题:
成功转换两个应用程序后,第三个应用程序崩溃了 代码中的随机位置。没有捕获异常,我必须查看我看到异常的事件日志 代码:ntdll.dll上的0xc0000005,我认为是一个内存访问异常。由于应用程序并不总是在同一个地方崩溃,因此很难跟踪。我注意到在调用ADODB期间发生了很多错误(并不总是在同一个地方或同一个调用中),但是在调用form.ShowDialog()时它也崩溃了。
调用ShowDialog的表单会将一些日志信息写入 DB使用ADODB。虽然我无法确认,但我猜测form.ShowDialog()在其中一个ADODB调用期间发生异常。 ADODB调用的崩溃发生在已成功用于转换的其他两个应用程序的程序集中,并且它不会在同一位置始终崩溃。
在我对此的研究中,我发现糟糕的互操作可能导致这个问题。想知道ADODB COM调用是否在某种程度上导致了这个应用程序中的问题,即使这些调用在其他应用程序中也没问题。
我观察过的一些地方显然将这个异常抛给了事件日志:
任何人都有任何想法如何我可以缩小到可能跟踪 问题根本原因?我感谢您提供的任何帮助或见解。
答案 0 :(得分:0)
Apartment-Model Threading in Visual Basic 6
最糟糕的情况是,您可以使用驱动程序生成一个单独的进程,并使用各种“进程间通信”技术从主应用程序与其进行通信。如果它崩溃,你会提出另一个,但你的主应用程序仍将继续运行。您甚至可以在绝对最坏的情况下将外部进程编写为VB6应用程序。
祝你好运。