1

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

4

3 回答 3

5

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

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

于 2017-01-26T12:37:12.770 回答
4

这是一个常见且有用的代码块,应该有助于加载正确的常用控件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
于 2017-04-04T18:53:48.470 回答
-2

您可以运行sfc /scannow以解决此问题。[参考]。

于 2019-10-31T14:47:36.203 回答