2013-10-05 39 views
0

我目前正試圖在我的項目中嵌入FMOD,我想獲取並打印FMOD的版本。 我做到了這一點:FMOD API不能正確返回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); 
} 

但我得到的是:

閃存模塊初始化(36)

而不是返回的版本,FMOD返回

回答

0

FMOD版本號存儲爲十六進制,因此很容易在內存中讀取,即0x00044421很容易讀取爲4.44.21,所以您應該使用%x而不是%d打印它。

另外System ::: getVersion的返回實際上是函數調用成功或失敗的FMOD_RESULT錯誤代碼,您不應該將它分配給您試圖獲取的版本號。

最後,您正在獲取FMOD_RESULT 36(FMOD_ERR_INVALID_HANDLE),因爲您正在使用的pSystem指針尚未初始化。您應該在EventSystem_Create後使用EventSystem :: getSystemObject來獲取有效的低級系統句柄。

0

首先,由getVersion()返回的版本號是unsigned int
所以,你應該在printf(未%d)使用%u類型說明符。

此外,getVersion()可以使用某些特定格式(例如,它可以在相同的無符號整數中「打包」版本主號碼和版本次號碼。例如,返回的值「36」可能意味着「版本3.6」?

+0

通常,getVersion會返回類似於「00044421」的內容http://pastebin.com/Zm3KDZkq – pushrq