C++ CFileDialog支持XP和Vista

C++ CFileDialog支持XP和Vista,c++,windows-xp,windows-vista,cfiledialog,C++,Windows Xp,Windows Vista,Cfiledialog,我的应用程序支持XP和更高版本,在Vista和更高版本下运行时,我尝试使用CFileDialog更新的界面(即GetIFileOpenDialog()),以尊重这些界面的限制 因此,我检查操作系统版本,并尝试在适当的情况下使用这些接口,然后使用XP的旧方法。问题是,在XP下运行时,我会遇到LoadLibrary故障(代码在DLL中),因此似乎有一些早期绑定正在进行。只要我注释掉使用这些接口的代码,LoadLibrary就会成功 即使没有调用CFileDialog代码,也可以在XP下运行使用Vis

我的应用程序支持XP和更高版本,在Vista和更高版本下运行时,我尝试使用CFileDialog更新的界面(即GetIFileOpenDialog()),以尊重这些界面的限制

因此,我检查操作系统版本,并尝试在适当的情况下使用这些接口,然后使用XP的旧方法。问题是,在XP下运行时,我会遇到LoadLibrary故障(代码在DLL中),因此似乎有一些早期绑定正在进行。只要我注释掉使用这些接口的代码,LoadLibrary就会成功

即使没有调用CFileDialog代码,也可以在XP下运行使用Vista功能的CFileDialog代码吗


谢谢

您需要使用
LoadLibrary()
手动加载相关库(不会再次加载,但您需要一个好的句柄),然后使用
GetProcAddress()
获取函数的地址(
GetIFileOpenDialog
)。如果您直接使用Vista函数,它将不会加载到XP上,因为正如您所说,它会直接绑定函数。

知道如何找到在哪里实现GetIFileOpenDialog吗?我试过comdlg32.dll,但它不在里面。等等,这是用MFC的,对吗?因此,您首先需要在XP机器上安装正确版本的MFC。是的,但我目前正在尝试在Windows 7机器上动态调用GetIFileOpenDialog(),我知道在静态调用它时,它可以正常工作。MFC dll丛林是一个需要筛选的迷宫,我找不到实现GetIFileOpenDialog()的地方。我甚至尝试通过COM接口调用所有东西,但我也遇到了同样的问题(即我的dll无法在XP上加载)。好像所有的东西都需要提前绑定。好吧,看起来类本身支持“非vista”:(请参阅“备注”下的注释)不可以,因为需要提前绑定。