游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1881|回复: 2

DINPUT释放的错误,高手看看问题在哪里?

[复制链接]

9

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
发表于 2005-2-17 12:44:00 | 显示全部楼层 |阅读模式
相关代码如下
#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.

26

主题

417

帖子

476

积分

中级会员

总版主

Rank: 3Rank: 3

积分
476
发表于 2005-2-17 12:57:00 | 显示全部楼层

Re:DINPUT释放的错误,高手看看问题在哪里?

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;   // Try add this line.
        }
    }
    return 0;
}


9

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2005-2-17 15:27:00 | 显示全部楼层

Re:DINPUT释放的错误,高手看看问题在哪里?

原来是这样!太感谢楼上了!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-24 09:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表