Je charge dynamiquement des dlls opencv à l'aide de LoadLibrary. L'opération échoue fréquemment lors de l'exécution du code, mais elle réussit lors de l'exécution du code.Echec de LoadLibrary avec le code 126 sauf lors de l'exécution du code
Voici comment j'importer les 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;
est le code ici utilisé pour charger les 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
J'ai essayé de mettre un Thread.Sleep(1000);
avant chaque ligne, ce qui ne permet pas. Si je casse, et que je renverse LoadLibrary(p);
, il réussit à chaque fois. Il semble ne faire aucune différence combien de temps j'attends avant de franchir la ligne.
Si cela compte, je charge 45 dlls opencv. Quand je répète la boucle automatique, elle charge les 12 premiers de la liste, puis les 6 suivants, puis elle ne se chargera plus sur aucun des suivants (27 restants). Cela semble être cohérent. Cependant, si je passe le code à ce stade, fichier par fichier, je suis capable de charger tout le reste. J'utilise Windows 7 64 bits et mon application cible x86.
Est-ce que quelqu'un a une idée de ce qui se passe et comment y remédier?