c# - LoadLibrary 不会因缺少 DLL : why? 而失败

标签 c# interop

我确定我在文档中遗漏了一些明显的东西。我正在从 C# 调用 LoadLibrary 并传入一个不存在的 DLL。正如我预期的那样,我正在返回 IntPtr.Zero,但是当我调用 Marshal.GetLastWin32Error 时,我总是得到 0。

这是示例。

class Program {

    [DllImport("kernel32.dll")]
    private static extern IntPtr LoadLibrary(string dllToLoad);

    [DllImport("kernel32.dll")]
    private static extern bool FreeLibrary(IntPtr hModule);

    static void Main(string[] args) {
        IntPtr pDll = LoadLibrary(@"c:\NotThere.dll");
        int err = Marshal.GetLastWin32Error();
        Console.WriteLine(err);
        Console.ReadLine();
    }
}

我正在将这样的代码添加到一个已经无缘无故无法加载 DLL 的程序中。知道为什么我没有收到错误消息吗?

最佳答案

用于记录错误,以便 Marshal.GetLastWin32Error() 可以读取它们, 你需要有 SetLastError=trueDllImport 上属性:

[DllImport("kernel32.dll", SetLastError=true)]
private static extern IntPtr LoadLibrary(string dllToLoad);

关于c# - LoadLibrary 不会因缺少 DLL : why? 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5804410/

相关文章:

c# - 立即停止 Parallel.ForEach

c# - VS 2019中如何在非grpc服务项目中添加proto文件

c# - 当 Func<t, t> 是必需的类型时,如何传递额外的参数?

c# - 在 NHibernate 映射层中使用复杂的 where 子句

c# - 为版本控制实现 ISerializable

c# - 为什么不能使用自动布局编码结构

java - 在 Clojure 中创建 flexmark 扩展

c# - 如何在没有互操作程序集的情况下创建 Microsoft Jet (Access) 数据库?

linux - 在 OS X 下运行 Linux 二进制文件

c# - RealPopup 通过邮槽发送什么样的数据?