调用TaskDialogIndirect加载器说未找到序号345

时间:2016-05-04 01:08:23

标签: windows windows-vista taskdialog

我为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 ???

3 个答案:

答案 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]。