我正在处理的 AC# 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 - 托管进程)。此外,“启用托管进程后,对某些 API 的调用可能会受到影响。在这种情况下,必须禁用托管进程才能返回正确的结果。” (请参阅 MSDN 文章如何:禁用托管进程)。在 Project > Properties... > Debug 中禁用“启用 Visual Studio 托管进程”选项,如下所示,确实可以解决问题:
有谁知道“......调用特定API......”具体可能导致这个问题的原因是什么?