我在WinXP下编译了一个.dll文件,但在加载时它声称找不到DWMAPI.DLL。问题在于这个DLL是Vista DLL,这是对于安装IE7的XP用户已知的问题。建议是通过添加/删除程序卸载IE7或修复.NET Framework。我进行了修复,但没有改变任何东西。我不想卸载IE7,因为一定有更好的解决方案,而不是等同于“重新安装Windows”的方法。
我读到有关那些试图卸载IE7的人的坏消息,所以我不愿意采用那种方式。
我正在使用Visual Studio 2003(7.1)下的C++。在应用程序启动时,我没有看到可以强制延迟加载的选项。我只是在创建DLL项目时使用了默认设置。我刚刚发现了一个有趣的选项,链接器->输入->延迟加载的DLL,所以我将DWMAPI.DLL放在那里强制它被延迟加载。然而,链接时出现了以下情况:
LINK : warning LNK4199: /DELAYLOAD:dwmapi.dll ignored; no imports found from dwmapi.dll
.. 当试图加载我的DLL时,这当然没有改变任何东西。出于好奇,我添加了导致DWMAPI.DLL的整个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的原因。以下是depends工具给出的信息,并且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.
Gerald正确。事实上,Maya使用的是不同于Dependency Walker的PATH。我的插件加载另一个DLL(用于图像处理),它位于Maya插件目录中,并且依赖项可以被找到并正常加载,但Maya没有。我不得不在Maya.env中添加“;plug-ins”到路径中。
既然这个问题与DWMAPI.DLL无关,但DWMAPI是一个常见的问题,那么我将在Novell的网站上发布我发现的关于DWMAPI问题的最佳链接这里。基本上,大多数程序都会在depends.exe中显示此警告,但如果它旁边有一个延迟加载图标,并且您确定该程序不会直接或间接调用DWMAPI,则没问题。问题出在其他地方。如果延迟加载图标不存在,则必须查看Visual Studio中的/DELAY和/DELAYLOAD选项。Depends给我“警告”而不是“错误”的事实提示了DWMAPI不会自动加载。