|
|
只是一个简单的键盘输入初始化程序,编译、连接都没有问题,运行的时候却显示“建立IDIRECTINPUT8接口对象失败”,是调用DirectInput8Create失败导致的?为什么呢?
//环境vc2008 vista
BOOL InitKeyboard(){
//创建IDirectInput接口对象
if(FAILED((g_hInst,DIRECTINPUT_VERSION,IID_IDirectInput8,(void**)&g_pIDirectInput,NULL)))
{MessageBox(NULL,".","警告",MB_OK|MB_ICONINFORMATION);return false;}//***显示的就是这一行代码执行结果
//
if(FAILED(g_pIDirectInput->CreateDevice(GUID_SysKeyboard,&m_pKeyboardDevice,NULL))){
MessageBox(NULL,"建立键盘输入设备对象失败.","警告",MB_OK|MB_ICONINFORMATION);
ReleaseCOMObject();
return false;
}
//设置键盘输入设备的协调级别
if(FAILED(m_pKeyboardDevice->SetCooperativeLevel(g_hWnd,DISCL_BACKGROUND|DISCL_NONEXCLUSIVE))){
MessageBox(NULL,"设置键盘协调级别失败.","警告",MB_OK|MB_ICONINFORMATION);
ReleaseCOMObject();
return false;
}
//设置键盘输入设备的数据格式
if(FAILED(m_pKeyboardDevice->SetDataFormat(&c_dfDIKeyboard))){
MessageBox(NULL,"设置键盘的数据读取数据格式失败.","警告",MB_OK|MB_ICONINFORMATION);
ReleaseCOMObject();
return false;
}
//获取键盘输入设备的访问权
if(FAILED(m_pKeyboardDevice->Acquire())){
MessageBox(NULL,"取得键盘设备的访问权失败.","警告",MB_OK|MB_ICONINFORMATION);
ReleaseCOMObject();
return false;
}
//初始化键盘缓冲区
ZeroMemory(keyBuffer,sizeof(char)*256);
return true;
}
ReleaseCOMObject(){
if(m_pKeyboardDevice){
m_pKeyboardDevice->Unacquire(); //释放DirectInput设备的使用权
SafeRelease(m_pKeyboardDevice); //释放DirectInput设备对象
SafeRelease(g_pIDirectInput); //释放DirectInput对象
}
}
//调用
int APIENTRY WinMain(HINSTANCE g_hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
InitKeyboard();
........
........
} |
|