У меня есть приложение C ++ для Windows, скомпилированное с MSVC, которое связывает с несколькими библиотеками во время выполнения. Приложение имеет интерфейс Excel: файл .xll, который пользователь может загрузить в Excel. Пользователь должен иметь возможность загружать XLL из любого места.
Все библиотеки расположены на общем диске, и ни один из пользователей не добавил это местоположение в свою переменную пути к Windows (я бы этого не хотел, поскольку эти библиотеки могут конфликтовать с другими программами). Я сделал приложение таким, чтобы при запуске приложения переменная пути Windows изменялась локально (только в сеансе, в котором запущено приложение), чтобы включить путь к этим библиотекам.
Это работает только потому, что в моем решении Visual Studio я могу указать, что эти библиотеки должны быть загружены с задержкой (динамическая загрузка во время выполнения).
Вот моя проблема: я хочу использовать boost-python для внешнего интерфейса Python. Boost python заставляет мое приложение загружать python27.dll при запуске приложения (связывание во время загрузки), то есть без задержки.
Я действительно пытался связать с задержкой, и получил следующую ошибку:
1> ССЫЛКА: фатальная ошибка LNK1194: не удается задержать загрузку ‘python27.dll’ из-за импорта символа данных ‘__imp___Py_NoneStruct’; ссылка без /DELAYLOAD:python27.dll
У меня вопрос, могу ли я каким-то образом изменить путь поиска во время загрузки из моего приложения?
Обратите внимание, что все те пользователи, которые используют интерфейс Excel, не намерены использовать интерфейс Python (который предназначен для другой группы пользователей), поэтому я не могу быть уверен, что у этих пользователей Excel установлен Python, особенно не версия 2,7.
Спасибо заранее,
Неле
Вы не можете изменить путь поиска во время загрузки из вашего приложения, так как ваше приложение еще не загружено, чтобы что-то делать. Лучшее, что вы можете сделать, — это какой-нибудь тип оболочки, такой как командный файл или другой скрипт, который будет настраивать среду, или, возможно, связать библиотеки DLL с полными путями к общему сетевому ресурсу.
Других решений пока нет …