Сбой vshost32.exe при вызове неуправляемой DLL - PullRequest
4 голосов
/ 09 апреля 2009

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

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

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

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


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

Mike

Ответы [ 5 ]

22 голосов
/ 26 июля 2009

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

Properties -> Debug -> Enable unmanaged code debugging

У тебя это работает?

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

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

1 голос
/ 15 ноября 2010

Я использую Visual C # 2010 Express. Мне удалось остановить сбои vshost32, перейдя в Project -> Properties. Я нажал на вкладку «Отладка» и снял флажок «Включить процесс размещения Visual Studio».

1 голос
/ 10 апреля 2009

Может быть, есть необработанное исключение. Вы можете попробовать добавить следующий код для обработки всех неотслеживаемых исключений:

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();  
    }
}

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

1 голос
/ 10 апреля 2009

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

0 голосов
/ 29 апреля 2009

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

...