我目前正在尝试将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
发布于 2013-10-07 10:51:56
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-05 22:26:19
首先,getVersion()返回的版本号是一个unsigned int。
因此,您应该在%u (而不是%d)中使用printf类型说明符。
此外,getVersion()可以使用某种特定的格式返回版本号,例如,它可以将版本号和版本号用相同的无符号整数“打包”。例如,返回值"36“是否可能意味着”版本3.6"?
https://stackoverflow.com/questions/19203190
复制相似问题