好的,刚刚下载了最新的 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 值没有正确初始化?