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

Я сейчас пытаюсь встраивать 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

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

По вопросам рекламы [email protected]