Я думаю статическое связывание (к ЭЛТ, т.е. /MT
опция компилятора) очень удобный при создании небольших инструментов, благодаря простота развертывания. (Sysinternals инструменты например, Process Explorer являются примером этого.)
Однако кто-то заставил меня заметить, что ЭЛТ использует несколько ресурсов, которые могут закончиться в таких контекстах, как архитектура плагинов (например, расширения оболочки): в частности, Индекс FLS кажется, тот, который заканчивается быстрее всего, и LoadLibrary()
может произойти сбой при загрузке 127-й ЭЛТ-статически связанной DLL.
Я создал несколько расширений оболочки, и никогда не сталкивался с этой проблемой.
Кто-нибудь когда-либо испытывал это истощение ресурсов проблема с CRT-статически связанными внутрипроцессными COM-серверами (например, расширениями оболочки)?
Если так, то есть ли «исправление» для этого (кроме использования динамического связывания с CRT, которое, к сожалению, усложняет развертывание и требует загрузки нескольких мегабайт для VCRedist, когда вместо этого небольшие файлы со статически связанным CRT составляют всего несколько сотен килобайт. ..).
Хм, это немного похоже на беспокойство, если у тебя есть хорошая резервная копия на случай, если удар от удара метеора разрушит машину. Пользователь вашего расширения оболочки некоторое время назад понял бы, что что-то не так. Получение 100+ DLL-файлов, внедряемых в процесс каждый раз, когда он использует диалог File + Open, не остается незамеченным, эта программа мертва для мира в течение 5 или более секунд.
Поэтому либо он что-то делает с этим, либо очищает свой компьютер с помощью утилиты, подобной AutoRuns от SysInternals. Вы переживете это, если ваше расширение будет достаточно полезным. Или пользователь не предпринимает никаких контрмер и рад, что существует жесткий верхний предел. Ваше расширение не удастся, но пользователь не сможет объяснить почему. Вы может быть позвоните в службу поддержки, вы знаете, что с этим делать.
Других решений пока нет …