我正在尝试创建一个简单的 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/