День добрый
Есть вопрос - стал разбирать исходники 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 не делается на асмовский код в той версии исходников которые собрались. Хочу понять что означают такие определения методов |