Предполагая, что COM-сервер загружает библиотеки DLL только по имени:
Если COM-сервер является встроенной DLL, он загружается в процесс клиента, поэтому клиент может использоватьSetDllDirectory()
или AddDllDirectory()
для себя, и сервер будет включать этот дополнительный путь при загрузке DLL.
Если COM-сервер находится вне EXE-файла, клиент не можетвлиять на пути поиска сервера, не изменяя глобальную среду PATH
перед загрузкой сервера, если только сервер не предоставляет метод COM, который клиент может вызвать, чтобы позволить серверу изменять свои собственные пути поиска.
Однако, если выможно поместить DLL-файлы в ту же папку, что и EXE-файл сервера, это будет первое место, где ОС их ищет, тогда вам вообще не придется возиться с путями поиска.
Если вы можете изменить сервер для загрузки библиотек DLL по абсолютным путям, то вы можете поместить библиотеки DLL в папку, путь которой относительно пути установки сервера, и заставить сервер получать свои данные.n путь к папке во время выполнения (через GetModuleFileName()
, убирая имя файла), а затем добавьте относительный путь каждой DLL + имя файла к этому базовому пути установки.
Или поместите библиотеки DLL в любое место и сохраните эти путигде-то во внутренней конфигурации вашего сервера.
Или зарегистрируйте библиотеки DLL в реестре, чтобы ОС знала, где их найти:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs