答案 0 :(得分:3)
只是简单地想一想它听起来像是一个x64互操作问题(即,从x64托管代码调用x32本机函数充满了危险)。如果强制应用程序从项目属性中编译为x32平台,问题是否会消失?
您可以阅读有关在Dotnetrocks上x32 / x64开发期间强制x32编译的建议。 Richard Campbell的建议是Visual Studio应默认为x32平台而不是AnyCPU。 http://www.dotnetrocks.com/default.aspx?showNum=341(transcript)。
关于高级调试,我没有机会调试x64互操作代码,但我听说这本书是一个很好的资源:Advanced .NET Debugging。
最后,您可以尝试的一件事是force Visual Studio to break when an exception is thrown。
答案 1 :(得分:2)
使用类似DebugDiag for x64或Windbg的内容在Kernel32!TerminateProcess
上编写转储,在.NET上编写第二次机会异常,它应该为您提供发生的异常的实际.excr
上下文框架。 / p>
这应该可以帮助您识别进程终止的调用堆栈。
IMO可能主要是因为PInvoke调用。您可以使用Managed Debugging Assistants来调试这些问题。
如果MDA与Windbg一起使用,它会发出有助于调试的消息
此外,我发现http://clrinterop.codeplex.com/团队的工具在处理互操作时非常方便
修改强>
这应该给出答案为什么它不能在64位Issue with callback method in SetTimer Windows API called from C# code中工作。
答案 2 :(得分:1)
这听起来像腐败问题。我将完成所有的互操作调用,并确保DllImport的函数的所有参数都是正确的类型。例如,使用int代替IntPtr将以32位代码工作,但可能会崩溃64位。
我会使用像PInvoke.net这样的网站来验证所有签名。