В настоящее время я разрабатываю приложение C++ с SDL, которое требует, чтобы DLL работали. Прямо сейчас, он найдет только DLL файлы в той же папке, что и программа. Как выполнить поиск программы в подкаталоге с именем "libs".
Если вы используете привязку времени загрузки, вам нужно, чтобы DLL находилась в пути поиска DLL. Это описано здесь: Порядок поиска библиотеки Dynamic-Link. Обычно это требует, чтобы вы добавили папку DLL в PATH
среды PATH
. Теперь добавление папки в PATH
среды PATH
является тяжелым решением проблемы. Вы, конечно, не хотите этого делать.
С другой стороны, если вы переключитесь на ссылку времени выполнения, вы можете передать полный путь вашей DLL к LoadLibrary
. Вы можете вызвать GetModuleFileName
чтобы найти имя файла исполняемого файла, а затем вытащить каталог и добавить \libs\MyDll.dll
. Но большой недостаток ссылки времени выполнения заключается в том, что вам нужно использовать GetProcAddress
для каждой импортируемой функции.
Ни один из этих вариантов не является особенно привлекательным. Моим советом было бы изменить предлагаемый дизайн. Поместите все библиотеки DLL, необходимые исполняемому файлу, в тот же каталог, что и исполняемый файл.
Добавьте путь к папке dll в Environment Variables
(будьте осторожны, чтобы пути там были разделены ;
).
C:\WINDOWS\system32
?