繁体   English   中英

VC ++应用程序-在Windows XP上将TaskDialog与回退配合使用

[英]VC++ application - use TaskDialog with fallback for Windows XP

我想在VC ++应用程序中使用任务对话框。 我可以使用TaskDialog或TaskDialogIndirect成功创建任务对话框,并且在Vista中可以正常工作。 但是,我希望我的应用程序也能在Windows XP上运行,并且由于Windows XP不支持“任务对话框”,因此我创建了自己的对话框,如果操作系统是XP,我想使用该对话框。

所以我的代码执行以下操作:如果操作系统是Vista或更高版本:显示TaskDialog否则显示我自己的对话框

现在,该应用程序仍无法在Windows XP中运行。 当我尝试在XP上启动应用程序时,出现错误“动态链接库comctl32.dll中找不到序号345”。 这可能是因为在我的代码中存在对TaskDialogIndirect的调用,尽管该调用位于if块中。 加载应用程序时,它将尝试在comctl32.dll中定位该功能,但由于它是dll的XP版本,因此找不到该功能。

所以我的问题是:

如何编写应用程序代码,使其在XP和Vista上都能成功运行,如果使用XP,则显示我自己的对话框,如果使用Vista和更高版本,则显示任务对话框?

问题在于您的应用程序对这些功能具有依赖性,OS加载程序会在应用程序启动时尝试解决这些依赖性。 但是,当然,这些功能在XP中不存在,因此可执行文件无法加载。

有两种解决方法。 首先,尝试延迟加载 comctl32.dll。 这将消除加载时间依赖性,并延迟解析,直到实际调用该函数为止。 然后,您只需要注意不要在不支持的地方调用它即可。

如果这不起作用,则必须通过LoadLibraryGetProcAddress明确绑定到TaskDialog 这样,您就不会以链接程序知道的方式显式地提及该函数,因此您无需对其进行加载时依赖。 但是,还有更多工作要做,要处理函数指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM