Я построил .dll под WinXP, который утверждает, что не может найти DWMAPI.DLL при загрузке. Проблема в том, что эта DLL - это DLL Vista, и это известная проблема для пользователей XP, у которых установлен IE7. Рекомендация состоит в том, чтобы удалить IE7 или восстановить .NET Framework с помощью программы "Установка и удаление программ". Я сделал ремонт, и ничего не изменилось. Я не собираюсь удалять IE7, так как должно быть лучшее решение, не эквивалентное "переустановке окон".
Я читал плохие вещи о людях, которые пытались удалить IE7, поэтому я не хочу идти по этому маршруту.
Я использую С++ в Visual Studio 2003 (7.1). Я не вижу вариант, когда я могу принудительно задерживать загрузку при запуске приложения. Я просто использовал настройки по умолчанию, когда я создал проект DLL. Я только что нашел интересный вариант, Linker- > Input- > Delay Loaded DLL, поэтому я поместил DWMAPI.DLL, чтобы заставить его задерживаться. Однако я получаю это при ссылке:
LINK : warning LNK4199: /DELAYLOAD:dwmapi.dll ignored; no imports found from dwmapi.dll
.. и он, конечно, ничего не изменил при попытке загрузить мою DLL. К черту этого, я добавил все дерево DLL, которые приводят к DWMAPI.DLL, и я получаю то же сообщение. (Для записи это файл base.dll- > shell32.dll- > shdocvw.dll- > mshtml.dll- > ieframe.dll- > dwmapi.dll.)
Чтобы быть более конкретным в том, что я делаю, я пишу плагин Maya и получаю всегда полезный текст в редакторе script:
// 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.
Джеральд прав. Майя, по сути, использует другую PATH, чем Walker Dependency. Мой плагин загружает другую DLL (для обработки изображений), которая живет в директории плагинов Maya и зависит от ее поиска без проблем, но Майя этого не сделала. Я должен был добавить "плагины" к PATH в Maya.env.
Увидев, что эта проблема не была связана с DWMAPI.DLL, но DWMAPI - распространенная проблема, я опубликую лучшую ссылку, которую я нашел о проблеме DWMAPI на веб-сайте Novell . В основном, большинство программ будут иметь это предупреждение в файле depend.exe, но если рядом с ним есть значок задержки, и вы уверены, что программа напрямую или косвенно не вызовет DWMAPI, тогда это нормально. Проблема в другом месте. Если значок задержки не присутствует, вы должны посмотреть параметры /DELAY и/DELAYLOAD в Visual Studio. Тот факт, что от этого зависит, дал мне "предупреждение", а не "ошибку", было ключом к тому, что DWMAPI не загружается автоматически.