|
|

楼主 |
发表于 2006-4-21 17:49:00
|
显示全部楼层
Re:新手求救,紧急
我照大家的意见修改了一下。这是定义
我照大家的意见修改了一下。这是定义
LPDIRECTINPUT8 m_pDI ;
LPDIRECTINPUTDEVICE8 m_pJoystick ;
我知道那个错误(error C2227)的原因了,因为静态成员函数无法直接访问非静态数据成员,要通过参数传递才可以。但是EnumJoysticksCallback这个函数是回调函数,我修改它的参数会出错。要是不定义成静态的函数,就会出现另一个错误。
MyJoystick.h文件中的定义:
LPDIRECTINPUT8 m_pDI ;
LPDIRECTINPUTDEVICE8 m_pJoystick ;
BOOL CALLBACK EnumJoysticksCallback(const DIDEVICEINSTANCE* pdidInstance, VOID* pContext ) ;
HRESULT InitDirectInput( HWND hWnd );
这样在初始化时,这条语句会出错(函数InitDirectInput中),
if( FAILED( hr = m_pDI->EnumDevices( DI8DEVCLASS_GAMECTRL,
EnumJoysticksCallback,
NULL, DIEDFL_ATTACHEDONLY ) ) )
return hr;
其中hr的定义:HRESULT hr;
会出现错误:
error C2664: 'EnumDevices' : cannot convert parameter 2 from 'int (const struct DIDEVICEINSTANCEA *,void *)' to 'int (__stdcall *)(const struct DIDEVICEINSTANCEA *,void *)'
我看过我们论坛上的一个帖子,说回调函数最好不要写在类中,但是我很困惑,如果放在类外面,又需要传参数,而它是一个回调函数;要是写成静态的成员函数,就不能使用非静态数据成员。
刚学游戏编程,对回调函数很陌生,请教大家,谢谢,不胜感激。 |
|