LoadLibraryを使用して動的にopencv dllをロードしています。コードを実行すると頻繁に操作は失敗しますが、コードをステップ実行すると成功します。ここでコードをステップ実行するときを除いて、コード126でLoadLibraryが失敗する
は、私がここでの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をターゲットにしています。
これがなぜ起こるのか、それを修正する方法を知っている人はいますか?