0

我目前正在尝试嵌入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

4

2 回答 2

0

首先,返回的版本号getVersion()是一个unsigned int.
所以你应该在(not )中使用%u类型说明符。printf%d

此外,可以使用某种特定格式getVersion()返回版本号,例如,它可以将版本主版本号和版本次版本号“打包”在同一个无符号整数中。例如,返回值“36”可能意味着“3.6 版”吗?

于 2013-10-05T22:26:19.837 回答
0

FMOD 版本号以十六进制形式存储,因此很容易在内存中读取,即 0x00044421 很容易读取为 4.44.21,因此您应该使用 %x 而不是 %d 打印它。

同样来自 System:::getVersion 的返回实际上是函数调用成功或失败的 FMOD_RESULT 错误代码,您不应将其分配给您尝试获取的版本号。

最后,您将获得 FMOD_RESULT 36 (FMOD_ERR_INVALID_HANDLE),因为您使用的 pSystem 指针尚未初始化。您应该在 EventSystem_Create 之后使用 EventSystem::getSystemObject 来获取有效的低级系统句柄。

于 2013-10-07T10:51:56.040 回答