Статическое связывание компонентов SHFolder - PullRequest
0 голосов
/ 30 декабря 2011

У меня есть приложение Win32, разработанное в C ++ Builder XE, которое отлично работало в средах WinPE 2.x / 3.0 в течение последних нескольких лет.За последние пару месяцев я внес некоторые существенные изменения, но теперь, когда он завершен, и я пытаюсь запустить его под WinPE, я получаю сообщение об ошибке: Программа не может запуститься, поскольку на вашем компьютере отсутствует SHFOLDER.DLL.

Поскольку я не могу управлять средой WinPE, и эта dll не включена в WinPE, моя первая мысль - попытаться статически связать необходимые компоненты.Тем не менее, кажется, что функциональность, предлагаемая этим dll, доступна только из dll.

Мне не удалось найти какую-либо полезную информацию об этой DLL, и, к сожалению, я не знаю, какие функции я добавил, чтотеперь требуется эта DLL.Я надеюсь, что кто-то имеет опыт работы с этим, и может помочь мне статически связать необходимые компоненты или найти обходной путь, чтобы это приложение больше не требовало DLL.Спасибо!

1 Ответ

1 голос
/ 30 декабря 2011

shfolder.dll используется для получения путей к папке оболочки, таких как Рабочий стол, Мои документы, каталог Windows и т. Д. Он последовательно реализует SHGetFolderPath() во всех версиях Windows из-за различий в реализации между SHGetSpecialFolderPath(), SHGetFolderLocation(), SHGetKnownFolderPath() и т. Д.

MSDN объясняет это лучше:

Эта функция представляет собой расширенный набор SHGetSpecialFolderPath, включенный в более ранние версии Shell. На системах, которые предшествовали тем, которые включает Shell32.dll версии 5.0 (Windows Millennium Edition (Windows Я) и Windows 2000), SHGetFolderPath был получен через SHFolder.dll, распространяется с помощью Microsoft Internet Explorer 4.0 и более поздние версии. SHFolder.dll всегда вызывает текущую платформу версия этой функции. Если это не удается, он пытается смоделировать соответствующее поведение. SHFolder.dll продолжает включаться для обратная совместимость, но функция теперь реализована в Shell32.dll.

Сама DLL является распространяемой , поэтому вы можете включить ее в WinPE. Вы также можете просто использовать любую из других функций, если они работают для вас, и вам не нужны никакие особые случаи.

...