我在Direct3D 11上使用DirectInput,并为x64编译,我从下面这一行得到了一个E_INVALIDARG:
HRESULT hr = DirectInput8Create(hInstance, DIRECTINPUT_VERSION, IID_IDirectInput8, reinterpret_cast<void **>(&this->_d8Input), 0);当我设置一个断点来查看所发生的事情时,我没有得到任何无效参数的迹象。我的hInstance是有效的,_d8Input指针也是有效的,并且DIRECTINPUT_VERSION设置为0x0800。
我以前在D3D9中使用过直接输入,以完全相同的方式,没有任何问题。我错过了什么?
谢谢。
发布于 2011-03-07 20:55:50
好吧,事实证明我是用/SUBSYSTEM:CONSOLE编译的,当使用控制台子系统时,从WinMain传入的hInstance根本不会让DirectInput8Create满意。
发布于 2011-03-07 08:09:31
好了,我刚刚下载了最新的DirectX软件开发工具包和平台软件开发工具包,这样我就可以在64位上测试它了,我创建了一个极其简单的64位应用程序。对于我添加的stdafx.h文件:
#define DIRECTINPUT_VERSION 0x0800
#include <Dinput.h>在_tWinMain函数中,我添加了:
void *outPtr = NULL;
HRESULT aResult = DirectInput8Create(hInstance, DIRECTINPUT_VERSION, IID_IDirectInput8, &outPtr, NULL);
if (aResult != DI_OK) {
LPCWSTR emesg = L"??";
switch (aResult) {
case DIERR_BETADIRECTINPUTVERSION: emesg = L"Beta Directinput version"; break;
case DIERR_INVALIDPARAM: emesg = L"Invalid Parameter"; break;
case DIERR_OLDDIRECTINPUTVERSION: emesg = L"Old Directinput Version"; break;
case DIERR_OUTOFMEMORY: emesg = L"Out of Memory"; break;
}
MessageBox(GetDesktopWindow(), emesg, emesg, 0);
}对于链接器选项,我添加了dinput8.lib和dxguid.lib
编译,检查应用程序是64位的,并且它可以干净地执行,不会生成无效的参数消息。我在outPtr变量中获得了一个有效值。我甚至查看了dinput.h文件的内容,它似乎表明DIRECTINPUT_VERSION被设置为默认的0x0800。
我不知所措,这在32位和64位都应该可以工作。
当我使用空值而不是outPtr时,我得到了一个无效的指针错误,所以这似乎表明问题不是来自指针的无效值。
当我使用有效hInstance以外的任何值时,我确实得到了一个无效参数-当我将值替换为0时,我得到了与您看到的相同的错误。可能hInstance值未正确初始化?
https://stackoverflow.com/questions/5213107
复制相似问题