gpt4 book ai didi

c# - 无法捕获由通过 PInvoke 调用的 C dll 引起的异常

转载 作者:太空狗 更新时间:2023-10-29 21:30:30 25 4
gpt4 key购买 nike

我正在编写一个使用最新 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);

用法:

    Handle = MediaInfo_New();
try{
MediaInfo_Open(Handle, FileName)
} catch { }

调用 MediaInfo_Open(Handle, FileName) 可能会导致异常。
我的程序没有使用 try/catch 语句捕获错误,而是退出并且“vshost32-clr2.exe”崩溃。 (它也作为发布版本崩溃并且没有附加调试器)
在网上搜索了一下,发现有人建议勾选“启用非托管代码调试”,结果我的程序直接退出了,vshost32-clr2.exe没有崩溃。

知道如何捕获异常吗?

最佳答案

如果非托管 DLL 导致崩溃(而不是仅仅返回某种错误代码),则无法捕获它。一旦脱离了 .NET 运行时的控制,就完全取决于非托管代码了; .NET 运行时无能为力。

关于c# - 无法捕获由通过 PInvoke 调用的 C dll 引起的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4987470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com