さて、最新のDirectXSDKとPlatformSDKをダウンロードしたばかりなので、これを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の代わりにNULL値を使用すると、無効なポインターエラーが発生します。これは、問題がポインターからの無効な値ではないことを示しているようです。
有効なhInstance以外のものを使用すると、無効なパラメーターが取得されます。値を0に置き換えると、同じエラーが発生します。おそらく、hInstance値が正しく初期化されていませんか?