STEAMAPIのCCallResult<CLeaderboards, LeaderboardFindResult_t>コールバックが来ない

STEAMAPIのスコアランキングを登録しようとしたときにハマりました

以下の記事を読み進めながら、Steamのリーダーボードを取得しようとしてもコールバック関数が呼ばれず困っていました partner.steamgames.com

あとサンプルも参考にしました

SteamSDK\steamworks_sdk_153a\sdk\steamworksexample\Leaderboards.cpp


↓呼び出し関数


    SteamAPICall_t hSteamAPICall = 0;

    hSteamAPICall = SteamUserStats()->FindLeaderboard("RankingName");

    CCallResult<CLeaderboards, LeaderboardFindResult_t> m_SteamCallResultCreateLeaderboard;
    m_SteamCallResultCreateLeaderboard.Set(hSteamAPICall, this, &CLeaderboards::OnFindLeaderboard);

↓これが呼ばれない!!!

void CLeaderboards::OnFindLeaderboard(LeaderboardFindResult_t* pFindLearderboardResult, bool bIOFailure)
{
    // see if we encountered an error during the call
    if (!pFindLearderboardResult->m_bLeaderboardFound || bIOFailure)
        return;

答えはここに書いてありました partner.steamgames.com

コールバックの処理
Steamのすべてのコールバックを確実に処理するために、新たなメッセージを定期的にチェックする必要があります。 これは、この呼び出しをゲームループに追加することで実現できます。
...
SteamAPI_RunCallbacks();
...

追記 上記で概ね準備は整ったのでいざ、スコアをアップロードするとコールバック内でエラーになってしまいました。 原因はリーダーボードがバグっていたようなので、作り直したら上手くいきました(解せないです!)


bool CSteamLeaderboards::UploadScore(int score)
{
    if (!m_CurrentLeaderboard)
        return false;

    SteamAPICall_t hSteamAPICall =
        SteamUserStats()->UploadLeaderboardScore(m_CurrentLeaderboard, k_ELeaderboardUploadScoreMethodKeepBest, score, NULL, 0);

    m_callResultUploadScore.Set(hSteamAPICall, this, &CSteamLeaderboards::OnUploadScore);

    return true;
}

void CSteamLeaderboards::OnUploadScore(LeaderboardScoreUploaded_t* pCallback, bool bIOFailure)
{
    if (!pCallback->m_bSuccess || bIOFailure)
    {
        int aaa = 0;
        aaa++; // ←ここに入ってくる = エラーでアップロード出来ていない
        //OutputDebugString("Score could not be uploaded to Steam\n");
    }
}