Жизнь намного проще, если вы храните библиотеки DLL в той же папке, что и исполняемый файл. Это первая папка поиска при загрузке библиотек. Чтобы переместить все библиотеки DLL в подпапку исполняемого каталога, необходима совместная работа всех библиотек DLL.
Скорее всего, у вас есть вторичные зависимости DLL, которые не взаимодействуют. Таким образом, exe загружает штрафа, но затем A не загружается B. Вы можете отладить это дальше с Dependency Walker , работающим в режиме профиля. Вполне возможно, что вторичная DLL загружается с неявным связыванием, и это вызывает и исключение. Независимо от причины, Depenency Walker приведет вас к проблеме.
Хотя вы можете изменить переменную PATH, это обычно не рекомендуется. Если вы решите пойти по этому пути, то не изменяйте всю систему, просто измените среду исполняемого процесса во время выполнения до первого LoadLibrary. Это приемлемо до тех пор, пока все ваши ссылки на DLL явные с использованием GetProcAddress.
Все общепринятые рекомендации рекомендуют помещать ваши библиотеки DLL в ту же папку, что и исполняемый файл. Я бы повторил эту рекомендацию. Если вы сделаете это, то сможете использовать неявные ссылки, которые значительно упростят ваш код.
Еще один вариант - отказаться от DLL и связать все прямо в ваш исполняемый файл. Если у вас нет архитектуры типа плагина, один большой exe - безусловно, самый простой подход.