LoadLibrary失败,代码为126,除非单步执行代码

时间:2017-05-10 21:06:34

标签: c# opencv dll loadlibrary

我正在使用LoadLibrary动态加载opencv dll。让代码运行时,操作会频繁失败,但是在单步执行代码时会成功。

以下是我导入dll的方法

[DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(string dllToLoad);
[DllImport("Kernel32.dll")]
static extern uint SetErrorMode(uint uMode);
[DllImport("Kernel32.dll")]
static extern uint GetLastError();

const uint SEM_FAILCRITICALERRORS = 0x0001;

以下是用于加载dll的代码。

// called once
SetErrorMode(SEM_FAILCRITICALERRORS);

// called for each dll string name in a loop
var p = Path.Combine(opencvDirectory, filename);
LoadLibrary(p);
var error = GetLastError();
// repeat with next file

我尝试在每行之前加Thread.Sleep(1000);,这没有用。如果我闯入并跨过LoadLibrary(p);,它每次都会成功。在踩到线路之前,我等待的时间似乎无关紧要。

如果重要,我正在加载45个opencv dll。当我重复自动循环时,它会加载列表中的前12个,然后是下一个6,然后它将不会再加载任何后续运行(剩余27个)。这似乎是一致的。但是,如果我此时逐步执行代码,我可以加载所有其余代码。

我正在运行64位Windows 7,我的应用程序的目标是x86。

有没有人知道为什么会发生这种情况,以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我为每次迭代(dll)添加了Thread.Sleep(50),并在每次API调用之前添加了Application.DoEvents()

Thread.Sleep(50);
Application.DoEvents();
LoadLibrary(p);
Application.DoEvents();
var error = GetLastError();

现在dll在经过几次传递后全部加载。

整个操作只需要比我想要的时间长一点。