游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3555|回复: 6

问题具体是这样地

[复制链接]

5

主题

12

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2003-10-28 16:54:00 | 显示全部楼层 |阅读模式

先定义的:
LPDIRECTINPUT8        lpdi      = NULL;  
LPDIRECTINPUTDEVICE8  lpdikey   = NULL;   
LPDIRECTINPUTDEVICE8  lpdimouse = NULL;   

然后INPUT初始化函数:
void Input::Input_Init(void)
{
DirectInput8Create(main_instance,DIRECTINPUT_VERSION,IID_IDirectInput8,(void**)&lpdi,NULL);
}

到这一段没问题

下面初始化键盘
void Input:Input_Init_Keyboard(void)
{

lpdi->CreateDevice(GUID_SysKeyboard, &lpdikey, NULL);
//就是调用这句语句时候出错

lpdikey->SetCooperativeLevel(handle,                  DISCL_NONEXCLUSIVE | DISCL_BACKGROUND);
   
lpdikey->SetDataFormat(&c_dfDIKeyboard);

lpdikey->Acquire();
   
}

单个编译时候没有问题,但是把这个类放到game.cpp里面就出现了
0x004164b6 处最可能的异常:0xC0000005: 读取位置 0x00000000 时发生访问冲突
的错误:(~~~



18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2003-10-28 21:01:00 | 显示全部楼层

Re:问题具体是这样地

handle是窗体的句柄,一定要先初始化好窗体,然后再初始化dinput,你的程序的接构上有问题,可能是在初始化窗体之前就初始化dinput了。

5

主题

12

帖子

16

积分

新手上路

Rank: 1

积分
16
 楼主| 发表于 2003-10-28 21:07:00 | 显示全部楼层

Re: Re:问题具体是这样地


俺的游戏结构是这样的:

main.cpp 初始化win窗口,里面调用:game_init函数和game_main,game_down函数

game类里面包含上面三个函数

然后我是在game_init函数里面调用input_init和input_mouseinit函数地~~~



william9527: Re:问题具体是这样地

handle是窗体的句柄,一定要先初始化好窗体,然后再初始化dinput,你的程序的接构上有问题,可能是在初始化窗体之前就初始化dinput了。

5

主题

26

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2003-10-28 21:36:00 | 显示全部楼层

Re:问题具体是这样地

看异常信息应该是使用了空指针发生的问题。
main_instance和handle是全局变量?是否主函数里次序有问题?
简单的方法是对所有设备级的函数调用检测返回值(或throw异常),再单步跟踪试试。

5

主题

12

帖子

16

积分

新手上路

Rank: 1

积分
16
 楼主| 发表于 2003-10-28 22:34:00 | 显示全部楼层

Re: Re:问题具体是这样地

zonghongbin: Re:问题具体是这样地

看异常信息应该是使用了空指针发生的问题。
main_instance和handle是全局变量?是否主函数里次序有问题?
...



main_instance和handle是局部变量,只在input.cpp里定义了~~~

2

主题

20

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2003-11-13 09:34:00 | 显示全部楼层

Re:问题具体是这样地

感觉是作用域的问题。
没有具体看到定义部分,猜的。[em11]

69

主题

335

帖子

343

积分

中级会员

Rank: 3Rank: 3

积分
343
QQ
发表于 2003-11-13 11:39:00 | 显示全部楼层

Re:问题具体是这样地

这样实验一下

if(FAILED(DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&pDI, NULL))) //建立 DirectInput 对象
                MessageBox(pmywin->hWnd,"建立 DirectInput 对象失败!",NULL,NULL);
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-24 03:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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