В настоящее время я пытаюсь внедрить 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"?