还是callback的问题
前几天写了一个简单的会动的飞机,现在我想用手柄控制它。但是出错了。你们看看是不是语法问题。
头文件
[code=C/C++][/code]
#ifndef _JOYSTICK_H
#define _JOYSTICK_H
#include <dinput.h>
class JoyStick
{
public:
JoyStick(void);
JoyStick(LPDIRECTINPUT8 _Input,LPDIRECTINPUTDEVICE8 _InputDevice);
~JoyStick();
HRESULT JoyStickCreate(HWND hWnd);
BOOL CALLBACK JoyStickEnumCallback(const DIDEVICEINSTANCE* pdidInstance,void* pContent);
BOOL CALLBACK JoyStickAxesEnumCallBack(const DIDEVICEOBJECTINSTANCE* pdidoi,void* pContentText);
HRESULT JoyStickRead();
void JoyStickFree();
private:
LPDIRECTINPUT8 g_lpDI;
LPDIRECTINPUTDEVICE8 g_JoyStickDevice;
};
#endif
实现文件 实现文件只写到Create
小编译了下 出错了
#include "JoyStick.h"
JoyStick::JoyStick(void)
{
g_lpDI = NULL;
g_JoyStickDevice = NULL;
}
JoyStick::JoyStick(LPDIRECTINPUT8 _Input,LPDIRECTINPUTDEVICE8 _InputDevice)
{
g_lpDI = _Input;
g_JoyStickDevice = _InputDevice;
}
HRESULT JoyStick::JoyStickCreate(HWND hWnd)
{
HRESULT hr;
if (FAILED(hr = DirectInput8Create(GetModuleHandle(NULL),DIRECTINPUT_VERSION,IID_IDirectInput8,(void**)&g_lpDI,NULL)))
{
return hr;
}
if (FAILED(hr = g_lpDI->EnumDevices(DI8DEVCLASS_GAMECTRL,JoyStickEnumCallback,NULL,DIEDFL_ATTACHEDONLY)))
{
return hr;
}
if (g_JoyStickDevice == NULL)
{
MessageBox(NULL,L"游戏杆没有找到",L"TryPlane",MB_OK);
return S_OK;
}
if (FAILED( hr = g_JoyStickDevice->SetDataFormat(&c_dfDIJoystick)))
{
return hr;
}
hr = g_JoyStickDevice->SetCooperativeLevel(hWnd,DISCL_EXCLUSIVE | DISCL_FOREGROUND);
if (hr == DIERR_UNSUPPORTED )
{
JoyStickFree();
MessageBox(hWnd,L"不支持的协作模式",L"TryPlane",MB_OK);
return S_OK;
}
if (FAILED(hr))
{
return hr;
}
if (FAILED(hr = g_JoyStickDevice->EnumObjects(JoyStickAxesEnumCallBack,(void*)hWnd,DIDFT_AXIS)))
{
return hr;
}
}
错误报告如下
Error1error C3867: 'JoyStick::JoyStickEnumCallback': function call missing argument list; use '&JoyStick::JoyStickEnumCallback' to create a pointer to memberd:\程序\程序\08年4月\tryplane\tryplane\joystick.cpp25
Error2error C3867: 'JoyStick::JoyStickAxesEnumCallBack': function call missing argument list; use '&JoyStick::JoyStickAxesEnumCallBack' to create a pointer to memberd:\程序\程序\08年4月\tryplane\tryplane\joystick.cpp60
[解决办法]
check一下这句代码:
g_lpDI->EnumDevices(DI8DEVCLASS_GAMECTRL,JoyStickEnumCallback,NULL,DIEDFL_ATTACHEDONLY))
的g_lpDI->EnumDevices()参数都是什么,尤其是第二个参数,它是一个函数的指针,还是一个指针的指针。编译错误里面已经给出了错误
信息了。你这个东西有特定的依赖,基本上别人没法直接帮你改...