我正在开发的一个C# WPF应用程序包含许多调用未托管的外部DLL的操作。当正常运行应用程序时(即在Visual Studio调试器之外),所有对DLL的调用都能按预期工作。但是,当在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 - the Hosting Process)。此外,“当启用托管进程时,对某些API的调用可能会受到影响。在这些情况下,需要禁用托管进程以返回正确的结果。”(请参见MSDN文章How to: Disable the Hosting Process)。如下所示,在“项目”>“属性”...>“调试”中禁用“启用Visual Studio托管进程”选项确实可以解决问题:
有人知道是什么原因导致“对特定API的调用”出现了问题吗?