调用TaskDialogIndirect加载器表示找不到序号345



我为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。TaskDialog是在Vista中添加的,为什么我没有正确版本的ComCtl32.DLL???

这里有一个常见而有用的代码块,应该有助于加载正确的公共控件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

在Windows XP及更高版本(SxS)上有两个版本的ComCtl32.dll。v5.8x是默认版本,您需要选择加入才能获得v6,因为它可能与新的主题/视觉样式不兼容。大多数新功能和控件仅添加到v6中。

若要获得v6,您必须向应用程序添加清单。建议将清单嵌入到应用程序资源中,但也可以使用外部清单;只需将XML文件命名为CCD_ 2。

您可以运行sfc /scannow来解决此问题。【参考文献】。

最新更新