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

标签 c++ c visual-studio-2008 winapi dll

我正在尝试创建一个简单的 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 上运行的可执行文件。如果可能的话,我不想有条件编译和有两个可执行文件。

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

最佳答案

您必须使用 LoadLibrary() 和 GetProcAddress() 来获取此函数的入口点。在 XP 上,您将从 GetProcAddress() 返回 NULL,足以跳过调用。有一个 good example在 SDK 文档中,唯一棘手的部分是声明函数指针:

  typedef BOOL (WINAPI *MYPROC)(HWND, LPCWSTR); 

关于c++ - 管理 Windows XP 和 Vista/Server 2008 之间的 Windows API 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2252767/

相关文章:

c++ - Keil5 C工程转C++工程报错用中断函数

c++ - 在线程内调用纯虚方法

c++ - 在 Visual C++ 2008 中取消引用 char 指针时出现未处理的异常

visual-studio-2008 - 使用 OpenNI 和 Qt 编译 OpenCV 2.3

c# - 在 VS2008 中的 Windows x64 上调试 x86 .NET 应用程序

c++ - 如何设置一个 "precise"周期定时器来监视 Linux(C/C++) 中的东西?

c++ - C++ 将一个类的多个对象封装到另一个类中

Cygwin 显示错误 iostream.h 无法定位

c - 每个静态数组成员都初始化了吗?

c - 确定象限 if else