游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1446|回复: 2

各位前辈请指教!

[复制链接]

1

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-4-21 11:47:00 | 显示全部楼层 |阅读模式
  最近,我在学习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();
        }
}

0

主题

30

帖子

30

积分

注册会员

Rank: 2

积分
30
QQ
发表于 2005-4-21 12:36:00 | 显示全部楼层

Re:各位前辈请指教!

建议楼主打开dinput.h头文件,然后搜一下DirectInput8Create,再看看它周围是否有形如:
#ifdef DIRECTINPUT_VERSION > 0x0800
...
#else
...
#endif
的语句,如果有的话,建议楼主在#include <dinput.h>之前加上
#define DIRECTINPUT_VERSION 0x0800
或许有用……

0

主题

30

帖子

30

积分

注册会员

Rank: 2

积分
30
QQ
发表于 2005-4-21 12:40:00 | 显示全部楼层

Re: 各位前辈请指教!

改成
#define DIRECTINPUT_VERSION 0x0700
应该就能用DirectInputCreate了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-25 10:28

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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