FMOD API не возвращает версию FMOD должным образом

0

В настоящее время я пытаюсь внедрить FMOD в свой проект, и я хочу получить и распечатать версию FMOD. Я сделал это:

#include "fmodmanager.h"
#include "fmod_errors.h"
#include <string>

using namespace FMOD;
EventSystem     *pEventSystem;
Event           *pEvent = NULL;
System          *pSystem;
FMOD_RESULT     result;
CFMODManager gFMODMng;

CFMODManager* FMODManager()
{
    return &gFMODMng;
}

void ERRCHECK(FMOD_RESULT result)
{
    if (result != FMOD_OK)
    {
        WarnMsg("FMod error! (%d) %s\n", result, FMOD_ErrorString(result));
    }
}

CFMODManager::CFMODManager()
{
}

CFMODManager::~CFMODManager()
{
}

// This starts FMOD
void CFMODManager::InitFMOD( void )
{
    ERRCHECK(result = FMOD::EventSystem_Create(&pEventSystem));
    ERRCHECK(result = pEventSystem->init(64, FMOD_INIT_NORMAL, 0, FMOD_EVENT_INIT_NORMAL));

    // Print the version
    fmodVersion = pSystem->getVersion(&fmodVersion);
    Msg("FMod initialized (%d)\n", fmodVersion);
}

Но я получаю:

Инициализировано FMod (36)

Вместо того, чтобы возвращать версию, возврат FMOD 36

Теги:
fmod

2 ответа

0
Лучший ответ

Номер версии FMOD хранится как шестнадцатеричный, поэтому его легко читать в памяти, т.е. 0x00044421 легко читается как 4.44.21, поэтому вы должны печатать его, используя% x вместо% d.

Также возвращение из System: getVersion на самом деле является кодом ошибки FMOD_RESULT для успеха или отказа вызова функции, вы не должны назначать его номер версии, которую вы пытаетесь извлечь.

Наконец, вы получаете FMOD_RESULT 36 (FMOD_ERR_INVALID_HANDLE), потому что указатель pSystem, который вы используете, не был инициализирован. Вы должны использовать EventSystem :: getSystemObject после EventSystem_Create для получения допустимого дескриптора системы нижнего уровня.

0

Во-первых, номер версии, возвращаемый getVersion() представляет собой unsigned int.
Поэтому вы должны использовать спецификатор типа %u в printf (не %d).

Кроме того, getVersion() может возвращать номер версии с использованием определенного формата, например, он может "упаковать" номер версии и номер версии в одно и то же целое число без знака. Например, возможно ли, что возвращаемое значение "36" может означать "версия 3.6"?

  • 0
    Обычно getVersion возвращает что-то вроде «00044421» pastebin.com/Zm3KDZkq

Ещё вопросы

Сообщество Overcoder
Наверх
Меню