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

调用非托管DLL时vshost32.exe崩溃,dll,visual-studio-2005,unmanaged,vshost32,Dll,Visual Studio 2005,Unmanaged,Vshost32,我正在使用VS2005应用程序与非托管(Fortran)DLL进行接口。当我直接从命令行运行编译后的可执行文件时,一切都很好——可以访问DLL,并且可以使用DLL中的函数 不幸的是,当我从VS2005启动应用程序时,我得到一个弹出窗口,说明“vshost32.exe已停止工作”,并且没有有用的调试信息 有没有人经历过这种行为,或者知道为什么会发生这种情况?我不明白为什么它在单机启动时运行良好,但不是通过vshost32 (最后一点注意:我正在使用.local文件强制从cwd使用已注册的dll,但

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

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

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

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


非常感谢


Mike

不确定,但您可以从属性->调试禁用visual studio宿主进程的使用,因为可能存在未处理的异常。您可以尝试添加以下代码来处理所有未修补的异常:

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();  
    }
}
出现潜在问题的原因是,调试时您可能有不同的工作文件夹,因此找不到本机库。

下载dependency walker
使用它打开dll,查看它是否依赖于该文件夹中不存在的其他dll。

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

属性->调试->启用非托管代码调试

对你有用吗

编辑:在较新版本中,该选项称为:
启用本机代码调试
(感谢Qwerty01)


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

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

令人惊讶的是,没有任何效果-仍然以相同的方式崩溃。你知道这个设置的确切效果吗?我认为vshost仍然在使用,但是.vshost.exe没有被使用。感谢您的帮助-仍然崩溃,但是我感谢调试帮助!不幸的是,没有捕获到未处理的异常。此外,我在调用非托管dll之前在代码中显式设置cwd。还是莫名其妙!感谢您的帮助。它假设在您有机会更改工作文件夹之前,外部dll已经解析。在执行此解析时,我找不到任何文档,但可能是在程序集进行JIT时?好吧,真正奇怪的是,我可以调用非托管DLL中的一些函数,但不是所有函数。呃!在运行时,您的路径上可能有不同版本的dll?或者dll中的某些函数动态加载其他库,这些库在运行时不在您的路径上这是一个不错的建议。我做了很多尝试和错误的东西,我决定在VisualStudio之外运行这个该死的东西。我无法调试这个特定的应用程序,但生活仍在继续。又来了!谢谢你的建议!不幸的是,由于它在命令行中运行良好,我可以排除一个依赖性问题——只需要使用.vshost。在某处搞砸了的可执行文件。唉!你有没有想过?我也有同样的问题:(遗憾的是,没有。我已经尝试了所有的方法,从修改调用约定到围绕Fortran编写一个C包装器,然后包装它!祝你好运,但是,如果你得到任何结果,请在下面留下答案!Thx:)我也有同样的问题。您找到解决方案或解决方法了吗?这修复了我的vshost32.exe崩溃问题。这捕获到一些非托管fortran代码中的错误,导致我的程序崩溃。好消息,我整天都在和这件事斗争。谢谢