我在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的原因.这些消息取决于我,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不同的PATH.我的插件加载了另一个DLL(用于图像处理),它存在于Maya插件目录中并依赖于它没有问题,但是Maya没有.我不得不在Maya.env中为PATH添加";插件".
因为看到这个问题是不相关毕竟要dwmapi.dll文件,但DWMAPI是一个普遍的问题,我会后我发现关于Novell公司的网站上DWMAPI问题的最佳链接在这里.基本上,大多数程序都会在depends.exe中显示此警告,但如果旁边有一个延迟加载图标,并且您确定该程序不会直接或间接调用DWMAPI,那么它就没问题了.问题出在其他地方.如果不存在延迟加载图标,则必须查看Visual Studio中的/ DELAY和/ DELAYLOAD选项.依赖的事实给了我一个"警告"而不是"错误"是DWMAPI没有被自动加载这一事实的线索.
根据您更新的问题,DWMAPI.dll可能不是您的问题.每当您链接到mshtml时,依赖性walker总是会给您错误,因为它始终会检查延迟加载的DLL.
在这一点上,我最好的猜测是你的项目设置为动态加载运行时库,并且Maya正在更改DLL的搜索路径.因此,它可能无法找到MSVC运行时DLL.我很久没有开发Maya插件了,但是我最近遇到了其他带有插件DLL的应用程序的问题.
尝试将C/C++ - >代码生成 - >运行时库中的设置更改为多线程而不是多线程DLL.
除此之外,您可以尝试摆弄Dependency Walker,使其使用与Maya相同的搜索路径,看看是否可以提出另一个依赖性问题.
作为最后的手段,您可以在调试器中启动Maya并在LoadLibrary上设置断点,并找出哪个库没有以这种方式加载.