【发布时间】:2017-10-09 17:01:03
【问题描述】:
我正在使用 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。
有谁知道为什么会发生这种情况,以及如何解决它?
【问题讨论】:
标签: c# opencv dll loadlibrary