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

FMOD のバージョン番号は 16 進数で格納されているため、メモリ内で簡単に読み取ることができます。つまり、0x00044421 は 4.44.21 として簡単に読み取れるため、%d の代わりに %x を使用して出力する必要があります。

また、System:::getVersion からの戻り値は、実際には関数呼び出しの成功または失敗を示す FMOD_RESULT エラー コードです。取得しようとしているバージョン番号に割り当てるべきではありません。

最後に、使用している pSystem ポインターが初期化されていないため、FMOD_RESULT 36 (FMOD_ERR_INVALID_HANDLE) を取得しています。EventSystem_Create の後に EventSystem::getSystemObject を使用して、有効な低レベル システム ハンドルをフェッチする必要があります。

于 2013-10-07T10:51:56.040 に答える
0

まず、によって返されるバージョン番号getVersion()unsigned int.
したがって、%u型指定子 in printf(not %d) を使用する必要があります。

さらに、特定の形式getVersion()を使用してバージョン番号を返す場合があります。たとえば、バージョン メジャー番号とバージョン マイナー番号を同じ符号なし整数に「パック」することができます。たとえば、戻り値「36」が「バージョン 3.6」を意味する可能性はありますか?

于 2013-10-05T22:26:19.837 に答える