无法捕获由PInvoke调用的C dll引起的异常

Aro*_*okh 6 c# pinvoke exception try-catch .net-3.5

我正在编写一个使用最新MediaInfoLib Dll的C#.NET 3.5程序.
它似乎导致某些文件的异常.

我想捕获这些异常并确保我的程序继续运行,
但由于某种原因我无法通过简单的try/catch语句捕获它.

PInvoke方法:

    [DllImport("MediaInfo.dll")]
    private static extern IntPtr MediaInfo_New();
    [DllImport("MediaInfo.dll")]
    private static extern IntPtr MediaInfo_Open(IntPtr Handle,MarshalAs(UnmanagedType.LPWStr)] string FileName);
Run Code Online (Sandbox Code Playgroud)

用法:

    Handle = MediaInfo_New();
    try{
        MediaInfo_Open(Handle, FileName)
    } catch { } 
Run Code Online (Sandbox Code Playgroud)

调用MediaInfo_Open(Handle,FileName)可能会导致异常.
我的程序退出并且"vshost32-clr2.exe"崩溃,而不是使用try/catch语句捕获错误.(它也作为发布版本崩溃并且没有附带调试器)
在搜索网络后,我发现有人建议检查"启用非托管代码调试",这只导致我的程序退出而没有vshost32-clr2.exe崩溃.

知道如何捕捉异常吗?

Ada*_*son 7

如果非托管DLL导致崩溃(而不仅仅是返回某种错误代码),那么就无法捕获它.一旦你超出.NET运行时的控制范围,它完全取决于非托管代码; .NET运行时无法做到.

  • 好吧,我真的不想捕获异常。我只是不想让我的程序崩溃。这也是不可能的吗? (2认同)