NULL);
Объект DirectDraw, связанный с новой поверхностью вызван параметром lpDD. Этот метод заполняет поверхностную структуру описания &ddsd и возвращает указатель на новую поверхность (&lpDDS).
Вызвав IDirectDraw:: CreateSurface, Вы сначала опишите vtable объекта DirectDraw, затем опишите метод из vtable. Первый параметр в методе - ссылка к объекту DirectDraw, который был создан и вызывает метод.
Чтобы иллюстрировать различие между вызовом метода объекта COM в C и C ++, тот же самый метод на C ++ показывается ниже (C ++ неявно описывает указатель и передает его):
ret = lpDD- > CreateSurface (&ddsd, &lpDDS, NULL)
Чтобы получить текущий список методов, поддерживаемых макроопределениями, см. соответствующий файл заголовка для DirectX компонента, который Вы хотите использовать.
CLSCTX_ALL,
&IID_IDirectDraw,
&lpdd);
if
(! FAILED (ddrval))
dDdrval = IDirectDraw_Initialize (lpdd, NULL);
CLSID_DirectDraw - идентификатор DirectDraw класса объекта драйвера, и IID_IDirectDraw - часть интерфейса DirectDraw.lpdd - возвращенный объект DirectDraw. CoCreateInstance возвращает неинициализированный объект.
3 Прежде, чем Вы используете объект DirectDraw, Вы должны вызвать IDirectDraw:: Initialize. Этот метод берет параметр GUID драйвера, который функция DirectDrawCreate обычно использует (NULL в этом случае). Как только объект DirectDraw инициализирован, Вы можете использовать и разрушатть объект DirectDraw, как будто это было создано, используя функцию DirectDrawCreate. Если Вы не вызовете IDirectDraw::Initialize перед использованием одного из методов, связанных с объектом DirectDraw, произойдет ошибка DDERR_NOTINITIALIZED .
Перед закрытием прикладной программы, закроте COM , как показано ниже.
CoUnitialize ();
if( ddrval != DD_OK )
return;
ddrval = lpSurf->QueryInterface(
IID_IDirectDrawSurface2, (LPVOID
*)&lpSurf2);
if( ddrval != DD_OK )
return;
ddrval = lpSurf2->PageLock( 0 );
if( ddrval != DD_OK )
return;
ddrval = lpSurf2->PageUnlock( 0 );
if( ddrval != DD_OK )
return;
Интерфейс IDirectDrawSurface2 содержит все методы, обеспечиваемые интерфейсом IDirectDrawSurface, и имеет три новых метода: IDirectDrawSurface2:: GetDDInterface, IDirectDrawSurface2:: PageLock, и IDirectDrawSurface2:: PageUnlock.
Для большего количества информации относительно получения интерфейса IDirectDraw2, см. Интерфейс IDirectDraw2.
CLSCTX_ALL,
&IID_IDirectDrawClipper,
&lpClipper);
if
(!FAILED(ddrval))
ddrval = IDirectDrawClipper_Initialize(lpClipper,
lpDD, 0UL);
CLSID_DirectDrawClipper - идентификатор класса объекта DirectDrawClipper, IID_IDirectDrawClipper - в настоящее время поддерживаемый интерфейс и lpClipper - возвращенный объект ограничителя.
Ограничители, созданные механизмом класса должны быть инициализированы IDirectDrawClipper::Initialize прежде, чем Вы можете использовать объект. 0UL - параметр dwFlags, который в этом случае имеет значение 0, так как никакие флажки в настоящее время не поддержаны. В примере, показанном здесь, lpDD - объект DirectDraw, который обладает объект DirectDrawClipper. Однако, Вы могли бы задать NULL, который создаст независимый ограничитель (эквивалент созданию объекта DirectDrawClipper с использованием функции DirectDrawCreateClipper).
Перед закрытием прикладной программы, закройтей COM используя CoUninitialize, как показано ниже.
CoUnitialize ();
if
(FAILED(ddres))
...
ddres = lpDDSurface->QueryInterface(lpGuid,
&lpD3DDevice);
if
(FAILED(ddres))
...
Те же самые правила для счета ссылки и состояния срока службы для объектов (см. Интерфейс драйвера Direct3D ) предъявляются и к DirectDraw поверхностям и к Direct3D устройствам. Дополнительно, другие Direct3D интерфейсы устройства могут быть получены для той же самой DirectDraw поверхности. Это возможно, следовательно, одиночная DirectDraw поверхность может быть адресатом , и для ramp-основанного устройства и rgb-основанного устройства.
if
(FAILED(ddres))
...
ddres = lpDDSurface->QueryInterface(
IID_IDirect3DTexture, &lpD3DTexture);
if
(FAILED(ddres))
...
Те же самые правила для счета ссылки и состояния сроки службы, обсужденные для объектов (см. Интерфейс драйвера Direct3D ) прилагаются к текстурам Direct3D. Возможно использовать одиночный DirectDrawSurface, и как адресат представления и как текстуру.