我正在使用VS 2005应用程序与非托管(Fortran)DLL进行交互。当我直接从命令行运行编译的可执行文件时,一切都很好 - 可以访问DLL,我可以使用DLL中的函数。
不幸的是,当我从VS 2005启动应用程序时,我收到一个弹出窗口,声明“vshost32.exe已停止工作”并且没有有用的调试信息。
有没有人遇到过这种行为,或者知道为什么会这样?我无法弄清楚为什么它在单独启动时运行正常,但不能通过vshost32运行。
(最后一点说明:我正在使用.local文件强制从cwd使用已注册的dll,但是这个特殊的dll没有注册。我只是在这里注意它以防它有用。)
非常感谢,
麦克
答案 0 :(得分:22)
我遇到了vshost32.exe崩溃的问题,当我勾选复选框时,问题就消失了:
Properties -> Debug -> Enable unmanaged code debugging
它对你有用吗?
编辑:在更新的版本中,该选项被称为:Enable native code debugging
(感谢Qwerty01)
编辑:它似乎也有助于VS2008(@Deacon Frost),VS2010(@Alxandr)。
答案 1 :(得分:1)
不确定但您可以禁用属性中使用visual studio托管流程 - >调试
答案 2 :(得分:1)
可能存在未处理的异常。您可以尝试添加以下代码来处理所有未捕获的异常:
static void Main()
{
// Add a handler for the UnhandledExceptionEvent
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
static void CurrentDomain_UnhandledException
(object sender, UnhandledExceptionEventArgs e)
{
try
{
Exception ex = (Exception)e.ExceptionObject;
MessageBox.Show(ex.ToString(), "Error",
MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
finally
{
Application.Exit();
}
}
潜在问题的原因是您在调试时可能有一个不同的工作文件夹,因此找不到您的本机库。
答案 3 :(得分:1)
我正在使用Visual C#2010 Express。通过导航到Project - >我能够阻止vshost32崩溃。属性。我单击“调试”选项卡并取消选中“启用Visual Studio托管过程”复选框。
答案 4 :(得分:0)
下载依赖性walker http://www.dependencywalker.com/ 用它来打开你的dll,看看它是否依赖于该文件夹中不存在的其他dll。