我为TaskDialogIndirect构build了简单的MS示例(请参阅https://msdn.microsoft.com/en-us/library/windows/desktop/bb760544(v=vs.85).aspx )
当我运行它时,我得到“序数345不能位于dynamic链接库COMCTL32.dll”
上面的页面说它需要ComCtl32.DLL版本6,但是C:\ Windows \ System32 \ ComCtl32.DLL是5.82.7601.18201,我无法在磁盘上的任何位置find版本6。
我使用VS2012运行Windows 7。 TaskDialog是在Vista中添加的,为什么我没有正确版本的ComCtl32.DLL?
在Windows XP和更高版本( SxS )上有两个版本的ComCtl32.dll。 v5.8x是默认的,你需要选择加入v6,因为可能与新的主题/视觉样式不兼容。 大多数新功能和控件只能添加到v6中。
要获得v6,您必须将清单添加到您的应用程序中。 建议您将清单嵌入到应用程序资源中,但也可以使用外部清单; 只需将XML文件命名为yourappname.exe.manifest
。
这里有一个常见的和有用的代码块应该有助于加载正确的通用控件 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