我确定我在文档中遗漏了一些明显的东西。我正在从 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=true
在 DllImport
上属性:
[DllImport("kernel32.dll", SetLastError=true)]
private static extern IntPtr LoadLibrary(string dllToLoad);
关于c# - LoadLibrary 不会因缺少 DLL : why? 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5804410/