in my Windows C++ program I have a few dependencies on DLLs (coming with drivers of input devices). I don’t actually load the DLLs myself, but the drivers provide (small) .lib library that I statically link against (and I assume it is those libraries that make sure the DLLs are present in the system and loads them). I’m writing an application that can take input from a series of video cameras. At run-time, the user chooses which one to use. Currently my problem is that my routines that query whether a camera is connected already require the functionality of the camera being present on the system. I.e. let’s say there is camera model A and B, the user has to install the drivers for A and B, even if he knows he just owns model B. The user has to do this, as otherwise my program won’t even start (then when it started it will of course tell the user which of the two cameras are actually connected).
I’d like to know whether there is any possibility, at run-time, to determine which of the DLLs are present, and for those that aren’t, somehow disable loading even the static (and, thus, dynamic) component.
So basically my problem is that you cannot do if(DLL was found){ #include "source that includes header using functions defined in lib which loads DLL"}
I think using the DELAYLOAD linker flag may provide the functionality required. It would allow linking with the
.libfiles but would only attempt to load the DLL if it is used:The code would be structured something similar to:
From Linker Support for Delay-Loaded DLLs
: