Сбой 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, которых нет в этой папке.