Это зависит от того, как ваше приложение связано. Я предполагаю, что, как и большинство современных приложений, вы создаете его с помощью манифеста сборки, который создает контекст загрузки. Если нет, то библиотеки DLL будут найдены в% PATH%, так что вы можете использовать это. Однако, если вы используете манифест, читайте дальше:
В большинстве случаев, чтобы найти DLL в произвольном месте, вам придется динамически загружать свои зависимости, используя LoadLibrary
; см https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibrarya
Более длинный ответ: нет встроенного способа сделать это. Это будет дыра в безопасности, потому что это позволит злоумышленнику заменить библиотеки DLL своими собственными. Но предполагая, что ваше приложение не имеет к этому отношения, вы можете использовать LoadLibrary
для загрузки вашего bar.dll (находя его любым удобным вам способом); вам придется заменить все вызовы функций в этой DLL на указатели функций, которые вы решаете во время выполнения, используя GetProcAddress
(https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-getprocaddress).
Теперь, что касается вторичной зависимости baz.dll, я думаю , если вы сначала загрузите ее с LoadLibrary
, когда вы затем загрузите bar.dll, она разрешит свои зависимости от уже загруженной базы. .dll.
Если вы действительно хотите усложниться, вы можете обернуть зависимые DLL в сборку; сама сборка может указывать пути, я считаю. Но это становится довольно волосатым.