gpt4 book ai didi

c++ - DirectInput8Create 失败 : E_INVALIDARG

转载 作者:行者123 更新时间:2023-11-28 08:22:42 24 4
gpt4 key购买 nike

我将 DirectInput 与 Direct3D 11 一起使用,并针对 x64 进行编译,我从这一行得到一个 E_INVALIDARG:

HRESULT hr = DirectInput8Create(hInstance, DIRECTINPUT_VERSION, IID_IDirectInput8, reinterpret_cast<void **>(&this->_d8Input), 0);

当我设置一个断点来查看发生了什么时,我没有发现任何无效参数的迹象。我的 hInstance 有效,_d8Input 指针也是有效的,DIRECTINPUT_VERSION 设置为 0x0800。

我以前在 D3D9 中使用过直接输入,方式完全相同,没有任何问题。我错过了什么?

谢谢。

最佳答案

好的,刚刚下载了最新的 DirectX SDK 和 Platform SDK,所以我可以在 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 位中“应该都能工作”。

当我使用 NULL 值而不是 outPtr 时出现无效指针错误,这似乎表明问题不是来自指针的无效值。

当我使用有效的 hInstance 以外的任何东西时,我确实得到了一个无效参数 - 当我用 0 替换该值时,我得到了与您看到的相同的错误。也许 hInstance 值未正确初始化?

关于c++ - DirectInput8Create 失败 : E_INVALIDARG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5213107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com