Любая идея, что может вызвать "vshost32.exe перестал работать" в Visual Studio 2013?
Приложение A C# WPF, над которым я работаю, содержит много обращений к неуправляемой внешней DLL. Все вызовы библиотеки DLL работают, как и ожидалось, при нормальном запуске приложения (т. Е. Вне отладчика Visual Studio). Однако при отладке из Visual Studio 2013 вызов одного конкретного метода в DLL приводит к сбою приложения:
Вот как я импортирую метод:
[DllImport("Client.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern string ClientGetVersion();
... и вот как я вызываю метод DLL:
try
{
version = ClientGetVersion();
}
catch (Exception ex)
{
// Error handling omitted for clarity...
}
Похоже, что Visual Studio использует процесс vshost32.exe для размещения приложений во время сеанса отладки ( VSHOST - процесс хостинга). Кроме того, "вызовы определенных API могут быть затронуты, когда включен процесс хостинга. В этих случаях необходимо отключить процесс хостинга, чтобы получить правильные результаты". (См. Статью MSDN Как отключить процесс хостинга). Отключение опции "Включить процесс размещения Visual Studio" в Project > Properties... > Debug, как показано ниже, действительно решает проблему:
Кто-нибудь знает, что конкретно может вызвать эту проблему с "... вызовы конкретных API..."?
2 ответа
Ошибка vshost32.exe вызвана неправильным оператором DllImport - тип возвращаемой внешней DLL не может быть строковым, это должно быть IntPtr.
Вот исправленный код:
[DllImport("Client.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern IntPtr ClientGetVersion();
... и это пересмотренный вызов метода DLL:
string version;
try
{
version = Marshal.PtrToStringAnsi(ClientGetVersion());
}
catch (Exception ex)
{
// Error handling omitted for clarity...
}
Спасибо @HansPassant за ответ.
Закройте Visual Studio и перезапустите в режиме администратора. Это работа!!!