|
|
最近,我在学习DX,可是,当创建DIREXTINPUT对象时,编译系统告诉我,DirectInputCreate
函数是没有声明的变量,我明明#include<dinput.h>了,然而,当我用DirectInput8Create函数时,虽然可以编译通过,但是,运行程序时,程序告诉我,DirectInput对象没有创建成功,
我不知道这是为什么!!
我明明已经把 diguid.lib 和dinput8.lib 加入到工程中了,我的系统是Xp,编译器是VC++6.0,
安装的是DX9.0,所用的是DX8.0 SDK,我不知道是哪里出错了!
敬请各位高手指点迷津,小弟万分感激!!!!!!!!!!!!!!!
这是我的代码_-------------------------------
//Input.h
#ifndef _Input_H_
#define _Input_H_
#include <dinput.h>
class myInput
{
public:
myInput();
virtual ~myInput();
bool WINAPI InitDINPUT(HINSTANCE hInstance);
bool WINAPI DInputRelease();
void WINAPI Loop();
protected:
LPDIRECTINPUT8 lpdINPUT;
LPDIRECTINPUTDEVICE8 lpdINPUTDEVICE;
char *buffer;
};
#endif
//Input.cpp-----------------------------------------------------------------------------------------------------
#include "Input.h"
#define KEYDOWN(key) (buffer[key] & 0x80)
myInput::myInput()
{
this->lpdINPUT=NULL;
this->lpdINPUTDEVICE=NULL;
this->buffer=new char[256];
}
myInput::~myInput()
{
}
bool WINAPI myInput:: InitDINPUT(HINSTANCE hInstance)
{
HRESULT hr;
hr=DirectInput8Create(hInstance,DIRECTINPUT_VERSION,
IID_IDirectInput8,(void**)&lpdINPUT,NULL);
if(hr=!DI_OK)
{
MessageBox(GetActiveWindow(),"Create DINPUT Error!","",
MB_OK);
return false;
}
hr=lpdINPUT->CreateDevice(GUID_SysKeyboard, &lpdINPUTDEVICE, NULL);
if(hr=!DI_OK)
{
MessageBox(GetActiveWindow(),"Create DINPUTDEVICE Error!","",
MB_OK);
return false;
}
lpdINPUTDEVICE->SetDataFormat(&c_dfDIKeyboard);
lpdINPUTDEVICE->SetCooperativeLevel(GetActiveWindow(),
DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
lpdINPUTDEVICE->Acquire();
return true;
}
bool WINAPI myInput:: DInputRelease()
{
this->lpdINPUTDEVICE->Unacquire();
this->lpdINPUTDEVICE->Release();
this->lpdINPUTDEVICE=NULL;
this->lpdINPUT->Release();
this->lpdINPUT=NULL;
return true;
}
void WINAPI myInput:: Loop()
{
lpdINPUTDEVICE->GetDeviceState(sizeof(buffer),(LPVOID)&this->buffer);
if (KEYDOWN(DIK_ESCAPE))
{
this->DInputRelease();
}
}
|
|