gpt4 book ai didi

c++ - 在早期 Windows 版本上运行时检查 Windows 10 功能是否存在

转载 作者:行者123 更新时间:2023-11-30 01:41:09 25 4
gpt4 key购买 nike

我正在写游戏。当它启动时,我想调用 Windows 10 GetCurrentPackageFullName() 函数来查看我的应用程序是否作为通用 Windows 程序运行。

但是,GetCurrentPackageFullName() 在 Windows 7 及更早版本中不存在,因此当人们在他们的系统上运行我的游戏时,他们会收到此错误:

image

有没有一种方法可以通过首先检查该函数是否存在于 kernel32.dll 中来避免此错误,如果不存在则不调用它?我尝试了以下方法,但它似乎不起作用:

try {
//do we even have this function?
typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
PGNSI pGNSI;
SYSTEM_INFO si;

ZeroMemory(&si, sizeof(SYSTEM_INFO));

pGNSI = (PGNSI) GetProcAddress( GetModuleHandle(TEXT("kernel32.dll")), "GetCurrentPackageFullName");

//ok this exists, now let's use it
if(pGNSI != NULL) {
//then I call the function here
}
} catch (int e) {
//do nothing, just don't crash
}

最佳答案

如果 NULL 是正确的解决方案,则使用 GetProcAddress() 并且不调用该函数。

我认为有两个问题:

  1. 您应该调用 LoadLibrary() 而不是 GetModuleHandle()

  2. 哪里有注释//then I call the function here,我怀疑你还在静态调用GetCurrentPackageFullName()函数。您需要通过 pGNSI 指针调用该函数,这样您就不会将该函数静态链接到程序中。

关于c++ - 在早期 Windows 版本上运行时检查 Windows 10 功能是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41864008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com