int DirectInput_Init(void) { HRESULT hr; if(dInput || dInput3) return true; // Create the DirectInput interface instance. Try version 8 first. if(FAILED(hr = CoCreateInstance(CLSID_DirectInput8, NULL, CLSCTX_INPROC_SERVER, IID_IDirectInput8, (LPVOID*)&dInput)) || FAILED(hr = dInput->Initialize(app.hInstance, DIRECTINPUT_VERSION))) { Con_Message("DirectInput 8 init failed (0x%x).", hr); // Try the older version 3 interface instead. // I'm not sure if this works correctly. if(FAILED(hr = CoCreateInstance(CLSID_DirectInput, NULL, CLSCTX_INPROC_SERVER, IID_IDirectInput2W, (LPVOID*)&dInput3)) || FAILED(hr = dInput3->Initialize(app.hInstance, 0x0300))) { Con_Message("Failed to create DirectInput 3 object (0x%x).", hr); return false; } Con_Message("Using DirectInput 3."); } if(!dInput && !dInput3) { Con_Message(" DirectInput init failed."); return false; } return true; }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pCmdLine, int nShowCmd) { HRESULT result = CoInitialize(0); LPDIRECTINPUT directinput; if (FAILED(result)) { std::cerr << "CL_DisplayWindow_Win32: Damn murphy must hate you. CoInitialize failed!" << std::endl; } result = CoCreateInstance(CLSID_DirectInput, 0, CLSCTX_INPROC_SERVER, IID_IDirectInput, (LPVOID *) &directinput); if (FAILED(result)) { std::cerr << "FAILURE" << std::endl; } else { std::cerr << "SUCCESS" << std::endl; result = directinput->Initialize(GetModuleHandle(0), DIRECTINPUT_VERSION); } if (!InitWindowsApp(hInstance, nShowCmd)) { ::MessageBox(0, "Init - Failed", "Error", MB_OK); return 0; } return Run(); }