|
|
相关代码如下
#define KEYDOWN(key)(buffer[key] & 0x80)
#define SAFE_RELEASE(p) {if(p){(p)->Release();(p)=NULL;}}
BOOL CloseAll()
{
pDev->Unacquire();
SAFE_RELEASE(pDev);
SAFE_RELEASE(pInput);
DestroyWindow( hWnd );
PostQuitMessage( 0 );
}
void InitInput()
{
DirectInput8Create(GetModuleHandle(NULL),DIRECTINPUT_VERSION,IID_IDirectInput8,(void**)&pInput,NULL);
pInput->CreateDevice(GUID_SysKeyboard,&pDev,NULL);
pDev->SetDataFormat(&c_dfDIKeyboard);
pDev->SetCooperativeLevel(hWnd,DISCL_EXCLUSIVE|DISCL_FOREGROUND);
pDev->Acquire();
}
int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
InitWindow(hInstance, nCmdShow);
InitInput();
for(;;)
{
pDev->GetDeviceState(sizeof(buffer),(LPVOID)&buffer);
if(KEYDOWN(DIK_ESCAPE))
{
CloseAll();
}
}
return 0;
}
程序可以编译通过并执行,但按ESC键退出后出现错误消息框,内容如下
Unhandle exception in CT(这是程序名).exe:0xC0000005: Acess Violation. |
|