我为TaskDialogIndirect构建了简单的MS示例(请参阅https://msdn.microsoft.com/en-us/library/windows/desktop/bb760544(v=vs.85).aspx)
当我运行它时,我得到"序号345无法位于动态链接库COMCTL32.dll"
上面的页面说它需要ComCtl32.DLL版本6但是C:\ Windows \ System32 \ ComCtl32.DLL是5.82.7601.18201而且我无法在磁盘上的任何位置找到版本6.
我正在使用VS2012运行Windows 7。在Vista中添加了TaskDialog,为什么我没有正确版本的ComCtl32.DLL ???
答案 0 :(得分:2)
Windows XP及更高版本(SxS)上有两个版本的ComCtl32.dll。 v5.8x是默认设置,因为可能与新的主题/视觉样式不兼容,您需要选择加入v6。大多数新功能和控件仅添加到v6。
要获得v6,您必须add a manifest到您的应用程序。建议您将清单嵌入应用程序资源中,但也可以使用外部清单;只需将XML文件命名为yourappname.exe.manifest
。
答案 1 :(得分:2)
这是一个常见且有用的代码块,可以帮助加载正确的公共控件,comctl32.dll
:
#if defined _M_IX86
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
答案 2 :(得分:0)
您可以运行sfc /scannow
来解决此问题。 [Reference]。