Я создал .dll под WinXP, который утверждает, что не может найти DWMAPI.DLL при загрузке. Проблема в том, что эта DLL-библиотека является Vista-DLL, и это известная проблема для пользователей XP, у которых установлен IE7. Рекомендуется удалить IE7 или восстановить .NET Framework с помощью компонента «Установка и удаление программ». Я сделал ремонт, и ничего не изменилось. Я не собираюсь удалять IE7, так как должно быть лучшее решение, которое не эквивалентно «переустановке Windows».
Я читал плохие вещи о людях, которые пытались удалить IE7, поэтому я не хочу идти по этому пути.
Я использую C ++ под Visual Studio 2003 (7.1). Я не вижу опции, в которой я мог бы принудительно отложить загрузку при запуске приложения. Я просто использовал настройки по умолчанию при создании проекта DLL. Я только что нашел интересную опцию, Linker-> Input-> Delay Loaded DLLs, поэтому я поместил туда DWMAPI.DLL, чтобы она загружалась с задержкой. Тем не менее, я получаю это при связывании:
LINK : warning LNK4199: /DELAYLOAD:dwmapi.dll ignored; no imports found from dwmapi.dll
.. и это, конечно, ничего не изменило при попытке загрузить мою DLL. Для этого я добавил все дерево библиотек DLL, которые ведут к DWMAPI.DLL, и получаю то же сообщение. (Для справки, это foundation.dll-> shell32.dll-> shdocvw.dll-> mshtml.dll-> ieframe.dll-> dwmapi.dll.)
Чтобы быть более точным в том, что я делаю, я пишу плагин Maya и получаю всегда полезный текст в редакторе скриптов:
// Error: Unable to dynamically load : D:/blahblahblah/mydll.mll
The specified module could not be found.
//
// Error: The operation completed successfully.
//
// Error: The operation completed successfully.
(mydll) //
Я использовал Dependency Walker, чтобы сначала отследить проблему, и это привело меня к DWMAPI.DLL. Это сообщение, которое дает мне сообщение, и DWMAPI.DLL - единственное, что имеет желтый вопросительный знак рядом с ним:
Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
Джеральд прав. Майя, на самом деле, использует другой путь, чем Ходок Зависимости. Мой плагин загружает другую библиотеку DLL (для обработки изображений), которая находится в каталоге плагинов Maya и зависит, без проблем нашел ее, но Maya этого не сделала. Мне пришлось добавить «; плагины» в PATH в Maya.env.
Поскольку эта проблема, в конце концов, не связана с DWMAPI.DLL, но DWMAPI является распространенной проблемой, я выложу лучшую ссылку, которую я нашел о проблеме DWMAPI, на веб-сайте Novell здесь . По сути, большинство программ будут иметь это предупреждение в depen.exe, но если рядом с ним есть значок отложенной загрузки, и вы уверены, что программа не будет прямо или косвенно вызывать DWMAPI, то это нормально. Проблема в другом. Если значок отложенной загрузки отсутствует, вам нужно посмотреть параметры / DELAY и / DELAYLOAD в Visual Studio. Тот факт, что зависит, дал мне «предупреждение», а не «ошибку», было подсказкой того факта, что DWMAPI не загружается автоматически.