4

我正在使用 VS 2005 应用程序与非托管 (Fortran) DLL 进行交互。当我直接从命令行运行编译后的可执行文件时,一切都很好——可以访问 DLL,并且可以使用 DLL 中的函数。

不幸的是,当我从 VS 2005 启动应用程序时,我收到一个弹出窗口,指出“vshost32.exe 已停止工作”并且没有有用的调试信息。

有没有人经历过这种行为,或者知道为什么会发生这种情况?我不明白为什么它在独立启动时运行良好,但不是通过 vshost32。

(最后一点:我正在使用 .local 文件强制从 cwd 使用已注册的 dll,但这个特定的 dll 未注册。我只是在此处注明,以防万一。)


非常感谢,

麦克风

4

5 回答 5

22

我遇到了 vshost32.exe 崩溃的问题,当我选中复选框时问题消失了:

Properties -> Debug -> Enable unmanaged code debugging

对你起作用吗?

编辑:在更新的版本中,该选项被称为:(Enable native code debugging感谢 Qwerty01)

编辑:它似乎也有助于 VS2008 (@Deacon Frost)、VS2010 (@Alxandr)。

于 2009-07-25T21:02:36.717 回答
1

不确定,但您可以从“属性”->“调试”禁用 Visual Studio 托管进程

于 2009-04-09T20:02:03.463 回答
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();  
    }
}

潜在问题的原因是您在调试时可能有不同的工作文件夹,因此找不到您的本机库。

于 2009-04-09T20:03:10.387 回答
1

我正在使用 Visual C# 2010 Express。我能够通过导航到 Project -> Properties 来阻止 vshost32 崩溃。我单击“调试”选项卡并取消选中“启用 Visual Studio 托管进程”复选框。

于 2010-11-15T02:06:46.400 回答
0

下载dependency walker http://www.dependencywalker.com/ 用它打开你的dll,看看它是否依赖于该文件夹中不存在的其他dll。

于 2009-04-29T00:22:22.447 回答