我目前正在尝试在项目中嵌入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 :(得分:0)
首先,getVersion()
返回的版本号是unsigned int
因此,您应该使用%u
中的 printf
类型说明符(而不是%d
)。
此外,getVersion()
可能会使用某种特定格式返回版本号,例如它可以在同一个无符号整数中“打包”版本主要编号和版本次要编号。例如,返回值“36”是否可能意味着“版本3.6”?
答案 1 :(得分:0)
FMOD版本号存储为十六进制,因此在内存中很容易读取,即0x00044421很容易读为4.44.21,因此您应该使用%x而不是%d打印它。
System ::: getVersion的返回实际上是函数调用成功或失败的FMOD_RESULT错误代码,您不应该将其分配给您尝试获取的版本号。
最后,您将获得FMOD_RESULT 36(FMOD_ERR_INVALID_HANDLE),因为您正在使用的pSystem指针尚未初始化。您应该在EventSystem_Create之后使用EventSystem :: getSystemObject来获取有效的低级系统句柄。