Я сейчас пытаюсь встраивать 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 хранится в шестнадцатеричном формате, поэтому его легко прочитать в памяти, т. Е. 0x00044421 легко прочитать как 4.44.21, поэтому вы должны распечатать его, используя% x вместо% d.
Кроме того, возвращение из System ::: getVersion на самом деле является кодом ошибки FMOD_RESULT для успешного или неудачного вызова функции, его не следует присваивать номеру версии, которую вы пытаетесь получить.
Наконец, вы получаете FMOD_RESULT 36 (FMOD_ERR_INVALID_HANDLE), поскольку используемый вами указатель pSystem не был инициализирован. Вы должны использовать EventSystem :: getSystemObject после EventSystem_Create, чтобы получить действительный системный дескриптор низкого уровня.
Во-первых, номер версии, возвращаемый getVersion()
является unsigned int
,
Так что вы должны использовать %u
спецификатор типа в printf
(не %d
).
Более того, getVersion()
может вернуть номер версии, используя какой-то определенный формат, например он может «упаковать» основной номер версии и дополнительный номер версии в одно и то же целое число без знака. Например, возможно ли, что возвращаемое значение «36» может означать «версия 3.6»?