Сбой vshost32.exe при вызове неуправляемой DLL

Я использую приложение VS 2005 для взаимодействия с неуправляемой (Fortran) DLL. Когда я запускаю скомпилированный исполняемый файл прямо из командной строки, все в порядке - доступ к DLL возможен, и я могу работать с функциями в DLL.

К сожалению, когда я запускаю приложение из VS 2005, я получаю всплывающее окно с сообщением "vshost32.exe перестал работать" и никакой полезной информации об отладке.

Кто-нибудь испытывал такое поведение или знает, почему это может происходить? Я не могу понять, почему он будет работать нормально при запуске автономно, но не через vshost32.

(И последнее замечание: я использую файлы.local, чтобы принудительно использовать зарегистрированные dll из cwd, но эта конкретная dll не зарегистрирована. Я просто отмечаю это здесь на случай, если это поможет.)


Спасибо большое,

Майк

5 ответов

У меня была проблема со сбоями vshost32.exe, проблема исчезла, когда я установил флажок:

Properties -> Debug -> Enable unmanaged code debugging

Работает ли это для вас?

РЕДАКТИРОВАТЬ: в более поздних версиях опция называется: Enable native code debugging (спасибо Qwerty01)

РЕДАКТИРОВАТЬ: Это также, кажется, поможет в VS2008 (@Deacon Frost), VS2010 (@Alxandr).

Не уверен, но вы можете отключить использование процесса размещения Visual Studio в Свойствах -> Отладка

Я использую Visual C# 2010 Express. Мне удалось остановить сбои vshost32, перейдя в Project -> Properties. Я нажал на вкладку "Отладка" и снял флажок "Включить процесс размещения 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();  
    }
}

Причина основной проблемы заключается в том, что при отладке у вас может быть другая рабочая папка, чтобы ваша собственная библиотека не была найдена.

Загрузите средство для просмотра зависимостей http://www.dependencywalker.com/ используйте его, чтобы открыть вашу DLL, и посмотрите, не зависит ли она от других DLL, которых нет в этой папке.

Другие вопросы по тегам