Win32App - > HEL/HAL -> Hardware
HEL( Hardware Emulation Layer ) 如果硬件不支持某个功能,HEL就会加入,通过软件运算来完成任务。
HAL( Hardware Abstraction Layer ) 只有当硬件能够支持所要执行的功能时 HAL才被使用。
DirectDraw:控制视频显示的主要图形渲染和2D位图引擎.所有图形的绘制都必须通过它。
DirectInput:鼠标、键盘等等..
DirectPaly:网络
DirectAudio:
DirectShow:流媒体
=======================================================================
COM是一个或一套实现了大量接口的类。
所有接口必须从 IUnknown派生。
virtual HRSULT __stdcall QueryInterFace( const IID &iid, (void ** )ip ) = 0 ;
virtual HRSULT __stdcall AddRef() = 0;
virtual HRSULT __stdcall Release() = 0;
QueryInterFace()中自动调用AddRef(), 需要人工调用Release();
用CoCreateInstance() 或 ComCreate()创建COM对象的初始IUnknown实例。 CoCreateInstance()自身条用 Addref(),许调用Release()释放。
真正的COM对象必须被合理地创建,并且要在注册表中注册。
在加入任何新接口的同时,仍然必须实现旧接口。
///
void main(void)
{
// create the main COM object
IUnknown *punknown = CoCreateInstance(); //已经调用了一次AddRef();
// create two NULL pointers the IX and IY interfaces
IX *pix=NULL;
IY *piy=NULL;
// from the original COM object query for interface IX
punknown->QueryInterface(IID_IX, (void **)&pix);
// try some of the methods of IX
pix->fx();
// release the interface
pix->Release();
// now query for the IY interface
punknown->QueryInterface(IID_IY, (void **)&piy);
// try some of the methods
piy->fy();
// release the interface
piy->Release();
// release the COM object itself
punknown->Release();
} // end main
///
=======================================================================
应用DirectX COM对象
The libraries you need are:
DDRAW.LIB
DSOUND.LIB
DINPUT.LIB
DINPUT8.LIB
DSETUP.LIB
DPLAYX.LIB
D3DIM.LIB
D3DRM.LIB
DDGUID.LIB
=======================================================================
创建和使用DirectX接口
1.包含 DDRAW.LIB输入库
2. #include <DDRAW.H >
3. HRESULT WINAPI DirectDrawCrateEx( GUID FAR *lpGUID, LPVOID *lplpDD, REFIID iid, IUnknow FAR *pUnkOuter );
///
LPDIRECTDRAW7 lpdd; // version 7.0
// create version 7.0 DirectDraw object interface
DirectDrawCreateEx(NULL, (void **)&lpdd, IID_IDirectDraw7, NULL);
///