我在WinXP下建立了一个.dll,声称它在加载时找不到DWMAPI.DLL。问题在于此DLL是Vista DLL,对于已安装IE7的XP用户来说,这是一个已知问题。建议通过“添加/删除程序”卸载IE7或修复.NET Framework。我进行了维修,但没有任何改变。我不会卸载IE7,因为必须有一个更好的解决方案,而不是“重新安装Windows”。
我读过一些有关尝试卸载IE7的人的坏消息,所以我不愿意这样做。
我在Visual Studio 2003(7.1)下使用C++。我看不到可能在应用程序启动时强制延迟加载的选项。创建DLL项目时,我只是使用默认设置。我刚才确实找到了一个有趣的选项,即Linker-> Input-> Delay Loaded 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的原因。这些是给我的消息,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.
杰拉尔德是对的。实际上,Maya使用的路径不同于Dependency Walker。我的插件加载了另一个驻留在Maya插件目录中的DLL(用于图像处理),并且可以毫无问题地找到它,但Maya没有。我必须在Maya.env的PATH中添加“; plug-ins”。
毕竟,这个问题与DWMAPI.DLL无关,但是DWMAPI是一个常见问题,我将在Novell的网站here上发布有关DWMAPI问题的最佳链接。基本上,大多数程序都会在depends.exe中显示此警告,但是如果旁边有一个延迟加载图标,并且您确定该程序不会直接或间接调用DWMAPI,则可以。问题出在其他地方。如果不存在延迟加载图标,则必须查看Visual Studio中的/ DELAY和/ DELAYLOAD选项。依赖的事实给了我一个“警告”而不是一个“错误”,这是DWMAPI没有自动加载的事实的线索。
最佳答案
根据您更新的问题,DWMAPI.dll可能不是您的问题。每当您链接到mshtml时,Dependency Walker都会始终为您提供该错误,因为它始终检查延迟加载的DLL。
此时,我最好的猜测是您已将项目设置为动态加载运行时库,并且Maya更改了DLL的搜索路径。因此,它可能无法找到MSVC运行时DLL。我已经很久没有开发Maya插件了,但是最近其他具有插件DLL的应用程序都遇到了这个问题。
尝试将C / C++->代码生成->运行时库中的设置更改为多线程而不是多线程DLL。
除此之外,您可以尝试摆弄Dependency Walker,使其使用与Maya相同的搜索路径,并查看是否可以提出另一个依赖问题。
作为最后的选择,您可以在调试器中启动Maya,并在LoadLibrary上设置一个断点,然后找出未通过这种方式加载的库。
关于dll - 如何修复WinXP下的DWMAPI.DLL延迟加载依赖性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/173433/