DirectInput8Create失败:E_INVALIDARG

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

要回复问题请先登录注册