调用 TaskDialogIndirect 加载程序表示未找到序号 345

And*_*ips 1 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。

我正在运行 Windows 7 和 VS2012。Vista 中添加了 TaskDialog,为什么我没有正确版本的 ComCtl32.DLL???

bvj*_*bvj 6

这是一个常见且有用的代码块,应该有助于加载正确的公共控件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
Run Code Online (Sandbox Code Playgroud)


And*_*ers 5

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

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