Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Quake sources


Автор: batraq 24.3.2010, 17:22
День добрый

Есть вопрос - стал разбирать исходники 1-го Quake - слил всё как полагается с официального сайта, под моей MSVS2008 всё собралось. Дальше принял решение переползать с убого(сугубо на мой взгляд) plain C на С++. Понятно что послепереименования файлов с "*.c" на "*.cpp" всё поехало - стал лечить и напоролся на вот такой кусок кода
Код

void FreeSound (void)
{
    int        i;

    if (pDSBuf)
    {
        pDSBuf->lpVtbl->Stop(pDSBuf);
        pDSBuf->lpVtbl->Release(pDSBuf);
    }


Ошибка следующая

Цитата

c:\development\quake_src\processed\winquake_proc\snd_win.cpp(121) : error C2039: 'lpVtbl' : is not a member of 'IDirectSoundBuffer'
        c:\development\quake_src\processed\winquake_proc\dxsdk\sdk\inc\dsound.h(165) : see declaration of 'IDirectSoundBuffer'


Начал копать и выяснил, что в DirectX SDK который идёт вместе с исходниками Quake прописана вот такая байда в файле  DSOUND.H

Код

#if !defined(__cplusplus) || defined(CINTERFACE)
#define IDirectSound_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)
#define IDirectSound_AddRef(p)                   (p)->lpVtbl->AddRef(p)
#define IDirectSound_Release(p)                  (p)->lpVtbl->Release(p)
#define IDirectSound_CreateSoundBuffer(p,a,b,c)  (p)->lpVtbl->CreateSoundBuffer(p,a,b,c)
#define IDirectSound_GetCaps(p,a)                (p)->lpVtbl->GetCaps(p,a)
#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b)
#define IDirectSound_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)
#define IDirectSound_Compact(p)                  (p)->lpVtbl->Compact(p)
#define IDirectSound_GetSpeakerConfig(p,a)       (p)->lpVtbl->GetSpeakerConfig(p,a)
#define IDirectSound_SetSpeakerConfig(p,b)       (p)->lpVtbl->SetSpeakerConfig(p,b)
#define IDirectSound_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)
#endif


Может кто подскажет, что это за странные определения - поскольку StepInto не делается на асмовский код в той версии исходников которые собрались. Хочу понять что означают такие определения методов

Автор: batraq 24.3.2010, 19:03
Отбой 8))
Я сам дурак - понял что не так было - просто не там глядел

Автор: Rickert 25.3.2010, 02:53
Поясни для потомков smile

Автор: batraq 6.4.2010, 14:31
Ну не в тот кусок кода смотрел надо было в другой - просто студия обычно закрашивает серым весь код который не будет выполнен из-за define, а тут чего-то не выделила вот я и думал какого фига здесь происходити смотрел не те объявления функций

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)