Порядок загрузки для неуправляемых сборок C ++ (в частности, распространяемых пакетов VS C ++ 2015 и Universal CRT) - PullRequest
1 голос
/ 31 октября 2019

Это похоже на вопрос здесь , но оно относится к неуправляемым сборкам C ++, а не к управляемым .Net.

Предполагая, что мой каталог приложения имеет свой собственный Visual Studio RedistributableDLL-библиотеки времени выполнения 2015 (я перераспределяю среду выполнения в каталоге приложения, на тот случай, если клиентский компьютер не может установить распространяемые файлы VC ++ из обновления Windows), и на клиентском компьютере также установлен пакет Visual Studio Redistributable 2015. Какой из них будет загружен, vcruntime140.dll, расположенный в каталоге приложения, или vcruntime140.dll установленный?

Аналогично, мой каталог приложения имеет собственный набор Universal C Runtime (сноваЯ делаю это по той причине, что некоторые клиентские машины не могут установить Universal CRT по разным причинам), и в случае, если на клиентских машинах также установлена ​​универсальная CRT, какая из них будет загружена, какие установлены DLL-библиотеки Universal CRT или какиев моем каталоге приложений?

Для Windows 10 и Universal CRT я знаю, что Универсальный CRT в системном каталоге всегда используется , даже если приложение включает в себяприкладная локальная копия универсальной ЭЛТ. Это верно даже в том случае, если локальная копия новее, потому что Universal CRT является основным компонентом операционной системы Windows 10.

Но я не уверен насчет других Windows 10 и выше распространяемого пакета Visual Studio C ++.

Таким образом я ищу ответы по всем поддерживаемым версиям Windows, включая Windows 7, Windows 8.1 и Windows 10 .

Примечание. Явызов неуправляемых сборок C ++ из .Net, если это имеет значение.

1 Ответ

0 голосов
/ 05 ноября 2019

Порядок загрузки ваших CRT dll в следующем порядке:

  • Каталог, из которого было запущено приложение
  • Текущий каталог
  • Системный каталог
  • Каталог Windows
  • Переменные окружения пути.

Вы можете поместить dll-файлы среды выполнения в текущий каталог приложения, и они должны загрузиться. Если вы компилируете в Windows 10 и не хотите UCRT ссылок, скомпилируйте с /NODEFAULTLIB

Или вы можете статически связываться с библиотеками CRT, используя опцию компиляции /MT

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...