в 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() НЕ имеет значения NULL, поскольку я вижу, что «SteamUser() действителен.\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
указываю свою собственную dll клиента Steam. Однако он обновлен.
Я также пробовал использовать SteamAPI_Init() и SteamAPI_InitFlat() для загрузки API, но получил тот же результат. p>
В Linux все работает нормально.
Обновление: я последовал совету из комментариев и получил точно такое же поведение при сбое.< /p>
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.");
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... getsteamid