Любая идея, что может вызвать "vshost32.exe перестал работать" в Visual Studio 2013?

Приложение A C# WPF, над которым я работаю, содержит много обращений к неуправляемой внешней DLL. Все вызовы библиотеки DLL работают, как и ожидалось, при нормальном запуске приложения (т. Е. Вне отладчика Visual Studio). Однако при отладке из Visual Studio 2013 вызов одного конкретного метода в DLL приводит к сбою приложения:

перестал работать vshost32.exe

Вот как я импортирую метод:

[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 и перезапустите в режиме администратора. Это работа!!!

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