管理Windows XP和Vista/Server 2008之间的Windows API差异

Tim*_*Tim 4 c c++ dll winapi visual-studio-2008

我正在尝试创建一个简单的Win32应用程序的单个可执行文件,该应用程序必须能够在Windows XP和Windows Vista/2008上运行.

由于Vista工作方式的一些变化,必须进行一些额外的Win32 API调用,以使程序正常运行,就像在XP上一样.

目前,我检测应用程序是否在比XP更新的Windows版本上运行,并根据需要调用额外的win32函数.这在Vista和Server 2008上运行时工作正常,但在Windows XP上运行时失败.

在Windows XP程序启动时,我收到错误消息:无法在动态链接库USER32.DLL中找到过程入口点ShutdownBlockReasonCreate.这在我的任何代码开始执行之前发生,并且在XP上运行时没有任何代码路径应该调用该函数.

我真的希望只有一个适用于XP和Vista的可执行文件.如果可能的话,我不想要有条件编译并且有两个可执行文件.

解决这个问题的最佳方法是什么?

Han*_*ant 6

您必须使用LoadLibrary()和GetProcAddress()来获取此函数的入口点.在XP上,你将从GetProcAddress()获得一个NULL,足以简单地跳过这个调用.在SDK文档中有一个很好的例子,唯一棘手的部分是声明函数指针:

  typedef BOOL (WINAPI *MYPROC)(HWND, LPCWSTR); 
Run Code Online (Sandbox Code Playgroud)