调用非托管DLL时vshost32.exe崩溃

时间:2009-04-09 19:34:56

标签: dll visual-studio-2005 unmanaged vshost32

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

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

有没有人遇到过这种行为,或者知道为什么会这样?我无法弄清楚为什么它在单独启动时运行正常,但不能通过vshost32运行。

(最后一点说明:我正在使用.local文件强制从cwd使用已注册的dll,但是这个特殊的dll没有注册。我只是在这里注意它以防它有用。)


非常感谢,

麦克

5 个答案:

答案 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。