我正在使用Direct3和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的直接输入,以完全相同的方式并没有任何问题。 我错过了什么?
感谢。
答案 0 :(得分:1)
好的,事实证明我正在使用/ SUBSYSTEM:CONSOLE进行编译,并且在使用控制台子系统时从WinMain传入的hInstance不会让DirectInput8Create完全没有。
答案 1 :(得分:0)
好的,刚刚下载了最新的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值未正确初始化?