c - Forsøg på at indlæse en DLL på Windows ved hjælp af LoadLibrary, når en afhængig DLL mangler

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en applikation, der bruger LoadLibrary på Windows til dynamisk at indlæse plugins. Men nogle af plugins har andre afhængige DLL'er, såsom database klient DLL'er.
Når du forsøger at indlæse en sådan DLL, og en af ​​de afhængige DLL'er ikke eksisterer, får du en ubehagelig Windows-dialog:


'Programmet kan ikke starte, fordi xxx.ddl mangler fra din computer. Prøv at geninstallere programmet for at løse dette problem. '


Er der nogen nem måde at undgå denne dialog? Jeg håbede, at man kunne bruge LoadLibraryEx og sende et flag, der siger 'ikke give mig den irriterende dialog', men det virker ikke som det.


Hvad jeg synes er, at applikationen skal håndtere denne fejl, snarere end Windows håndterer den for mig, især da teksten i meddelelsen er forkert (problemet er ikke, at programmet ikke kan starte, kører programmet ganske heldigvis, det kan bare ikke indlæse dette plugin).


Det, jeg gerne vil undgå, er at skulle omskrive de plugins, der har disse eksterne afhængigheder, for at gøre dem selv til at gøre en dynamisk belastning af eventuelle afhængige moduler og derefter søge efter eventuelle indgangspunkter.


Anyway vil eventuelle forslag modtaget taknemmeligt.

Bedste reference


Brug SetErrorMode (). Brug den med SEM\_NOOPENFILEERRORBOX | SEM\_FAILCRITICALERRORS, før du læser DLL'en og med 0 lige efter. [3]

Andre referencer 1


Fra MSDN:



  For at aktivere eller deaktivere fejlmeddelelser, der vises af loaderen under DLL-belastninger, skal du bruge funktionen SetErrorMode.



Link her [4]