Un'applicazione WPF C# su cui sto lavorando contiene molte chiamate a una DLL esterna non gestita. Tutte le chiamate alla DLL funzionano come previsto durante l'esecuzione dell'applicazione (ad esempio all'esterno del debugger di Visual Studio). Tuttavia quando il debug dall'interno di Visual Studio 2013, una chiamata a un metodo specifico nella DLL si blocca l'applicazione:Qualche idea su cosa può causare "vshost32.exe ha smesso di funzionare" in Visual Studio 2013?
questo è come importare il metodo:
[DllImport("Client.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern string ClientGetVersion();
... e questo è come chiamo il metodo DLL:
try
{
version = ClientGetVersion();
}
catch (Exception ex)
{
// Error handling omitted for clarity...
}
sembra che Visual Studio utilizza il processo vshost32.exe per ospitare applicazioni durante un debug ging session (VSHOST - the Hosting Process). Inoltre, "le chiamate a determinate API possono essere influenzate quando il processo di hosting è abilitato, in questi casi è necessario disabilitare il processo di hosting per restituire i risultati corretti." (Vedere l'articolo MSDN How to: Disable the Hosting Process). Disabilitare l'opzione "Attiva il processo di hosting di Visual Studio" in Project> Proprietà ...> Debug, come mostrato di seguito, effettivamente risolvere il problema:
Qualcuno ha idea di cosa potrebbe causare questo specifico problema con "... chiama a specifiche API ..."?
Basta correggere il bug nel codice. Il tipo di ritorno non può essere una stringa, deve essere IntPtr. Quindi utilizzare Marshal.PtrToStringAnsi() per ripristinare la stringa. –
Grazie a @HansPassant per la tua risposta veloce - che lo ha risolto! – YetMoreStuff