C ++ с Visual Studio 2017 - манипулировать порядком поиска в библиотеке при динамическом линковании во время загрузки - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть приложение C ++ для Windows, скомпилированное с MSVC, которое во время выполнения ссылается на несколько библиотек DLL.Приложение имеет интерфейс Excel: файл .xll, который пользователь может загрузить в Excel.Пользователь должен иметь возможность загружать xll из любого местоположения.

Все библиотеки расположены на общем диске, и никому из пользователей это местоположение не добавлено в его / ее переменную пути Windows (я бы не хотелчто, поскольку эти библиотеки могут конфликтовать с другими программами).Я сделал приложение таким, чтобы при запуске приложения переменная пути Windows изменялась локально (только в сеансе, в котором запущено приложение), чтобы включить путь к этим библиотекам.

Это толькоработает, потому что в моем решении Visual Studio я могу указать, что эти библиотеки должны быть загружены с задержкой (динамическая загрузка во время выполнения).

Вот моя проблема: я хочу использовать boost-python для внешнего интерфейса Python.Повышение python заставляет мое приложение загружать python27.dll при запуске приложения (связывание во время загрузки), т.е. без задержки.

Я действительно пытался связать с задержкой и получил следующую ошибку: 1> LINK: фатальная ошибка LNK1194: не удалось отложить загрузку 'python27.dll' из-за импорта символа данных '__imp___Py_NoneStruct';ссылка без /DELAYLOAD:python27.dll

Мой вопрос: могу ли я каким-то образом изменить путь поиска во время загрузки из моего приложения?

Обратите внимание, что все те пользователи, которые используют интерфейс Excel, не намерены использовать интерфейс Python (который предназначен для другой группы пользователей), поэтому я не могу быть уверен, что эти пользователи Excel имеютPython установлен, особенно не версия 2.7.

Большое спасибо заранее, Неле

1 Ответ

0 голосов
/ 20 декабря 2018

Вы не можете изменить путь поиска во время загрузки из вашего приложения, так как ваше приложение еще не загружено, чтобы что-то делать.Лучшее, что вы можете сделать, - это какой-нибудь тип оболочки, например, пакетный файл или другой скрипт, который будет настраивать среду, или, возможно, связать библиотеки DLL с полными путями к общему сетевому ресурсу.

...