Aplikacja C# WPF, nad którą pracuję, zawiera wiele wywołań do niezarządzanej zewnętrznej biblioteki DLL. Wszystkie wywołania biblioteki DLL działają zgodnie z oczekiwaniami podczas normalnej pracy aplikacji (np. Poza debugerem Visual Studio). Jednak podczas debugowania z poziomu Visual Studio 2013, wezwanie do jednej konkretnej metody w DLL wywala aplikacja:Każdy pomysł, co może spowodować, że "vshost32.exe przestał działać" w Visual Studio 2013?
ten sposób importować metodę:
[DllImport("Client.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern string ClientGetVersion();
... i I to jest jak wywołać metodę DLL:
try
{
version = ClientGetVersion();
}
catch (Exception ex)
{
// Error handling omitted for clarity...
}
Wydaje się, że Visual Studio wykorzystuje proces vshost32.exe gościć podczas debugowania aplikacji sesja ging (VSHOST - the Hosting Process). Ponadto, "Połączenia z niektórymi interfejsami API mogą zostać zakłócone, gdy proces hostowania jest włączony. W takich przypadkach konieczne jest wyłączenie procesu hostingu w celu zwrócenia poprawnych wyników." (Zobacz artykuł MSDN How to: Disable the Hosting Process). Wyłączenie „Włącz proces Visual Studio hosting” opcję w Projekcie> Właściwości ...> Debug, jak pokazano poniżej, rzeczywiście rozwiązać problem:
Czy ktoś ma jakiś pomysł co może być przyczyną tego specjalnie problem z "... wywołaniami do konkretnych interfejsów API ..."?
Napraw błąd w swoim kodzie. Typ zwracany nie może być łańcuchem, musi to być IntPtr. Następnie użyj Marshal.PtrToStringAnsi(), aby odzyskać ciąg znaków. –
Dzięki @HansPassant za szybką odpowiedź - to posortowało! – YetMoreStuff