Steam SDK C++ 在 GetSteamID() 上崩溃

问题描述 投票:0回答:1

在 Windows 64x 上,使用 steam api 版本 1.60(最后一个)。使用以下代码片段,游戏在函数上崩溃

GetSteamID

if (SteamAPI_InitEx(nullptr)) {
  if (SteamUser()) {
    printf("SteamUser() is valid.\n");
    try {
      CSteamID steamID = SteamUser()->GetSteamID();
      printf("SteamID: %llu\n", steamID.ConvertToUint64());
    } catch (const std::exception &e) {
      printf("Exception occurred: %s\n", e.what());
    }
  } else {
    printf("SteamUser() is nullptr.\n");
  }
  SteamAPI_Shutdown();
} else {
  printf("Failed to initialize Steam API.\n");
}

SteamUser()
不为空,正如我所见
"SteamUser() is valid.\n"
。这是一个有效的 ptr。 没有例外,只是该函数崩溃了
GetSteamID()
使用gdb,我们可以看到它在哪个函数中崩溃,这是
GetSteamID()

之后的下一个函数调用
Thread 1 "MainThrd" received signal SIGSEGV, Segmentation fault. 0x00007ffa5a3de225 in steamclient64!Steam_NotifyMissingInterface () from C:\Program Files (x86)\Steam\steamclient64.dll

指向我自己的 Steam 客户端 dll。不过已经是最新的了。

我还尝试使用

SteamAPI_Init()
SteamAPI_InitFlat()
加载 API,但得到了相同的结果。

在 Linux 上一切正常。

更新:我遵循了评论中的建议,我得到了完全相同的崩溃行为。

SteamErrMsg errMsg;
    if (SteamAPI_InitEx(&errMsg) == k_ESteamAPIInitResult_OK) {
        auto steamUser = SteamUser();
        if (steamUser) {
            LOG_ERROR(logger, "SteamUser() is valid.");
            try {
                CSteamID steamID = steamUser->GetSteamID();
                LOG_ERROR(logger, "SteamID: {}", steamID.ConvertToUint64());
            } catch (const std::exception &e) {
                LOG_ERROR(logger, "Exception occurred: {}", e.what());
            }
        } else {
            LOG_ERROR(logger, "SteamUser() is nullptr.");
        }
        SteamAPI_Shutdown();
    } else {
        LOG_ERROR(logger, "Failed to initialize Steam API.");
    }
c++ steam steamworks-api
1个回答
0
投票

使用 MSVC 代替 MinGW 解决了问题。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.