FMOD API无法正确返回FMOD版本

时间:2013-10-05 22:02:06

标签: c++ 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

2 个答案:

答案 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来获取有效的低级系统句柄。