Ich habe jetzt ziemlich lange rum geübt, bin mit meinem Latein am Ende. Aber das bin ich ohnehin recht schnell. Ich erhalte einen Absturz beim Acquirieren der Maus mit DirectX. Die Fehlermeldung lautet folgendermassen:
Ein Speicherfehler also, und mit denen bin ich sowieso nicht so bewandert. Grundsätzlich habe ich mit mehreren Samples und anderem Code verglichen, komme aber einfach nicht dahinter was falsch läuft. Hier ist der Code:
Header:
Source:
Wäre echt toll wenn mir jemand aus der Patsche helfen könnte... Wenns um Speicherkonflikte geht weiss ich meistens nicht mehr aus noch ein.
Unhandled exception at 0x0043341f in SpaceEngine.exe: 0xC0000005: Access violation reading location 0x00000000.
Ein Speicherfehler also, und mit denen bin ich sowieso nicht so bewandert. Grundsätzlich habe ich mit mehreren Samples und anderem Code verglichen, komme aber einfach nicht dahinter was falsch läuft. Hier ist der Code:
Header:
Code:
#pragma once
#include <dinput.h>
class DXInput
{
public:
DXInput(void);
~DXInput(void)
{
DI_Term();
}
void DI_Term();
HRESULT DI_Init( HWND hDlg );
DIMOUSESTATE GetMouseState();
private:
IDirectInput* g_pDI;
IDirectInputDevice* g_pMouse;
HINSTANCE g_hInst;
BOOL g_bActive;
DIMOUSESTATE MouseData;
DWORD dwNumElements;
};
Source:
Code:
#include "DXInputM.h"
DXInput::DXInput(void)
{
}
HRESULT DXInput::DI_Init( HWND hDlg )
{
HRESULT hr;
hr = DirectInputCreate( g_hInst, DIRECTINPUT_VERSION, &g_pDI, NULL );
if ( FAILED(hr) )
return hr;
hr = g_pDI->CreateDevice( GUID_SysMouse, &g_pMouse, NULL );
if ( FAILED(hr) )
return hr;
hr = g_pMouse->SetDataFormat( &c_dfDIMouse );
if ( FAILED(hr) )
return hr;
hr = g_pMouse->SetCooperativeLevel( hDlg, DISCL_EXCLUSIVE | DISCL_FOREGROUND);
HANDLE hevtMouse = CreateEvent( 0, 0, 0, 0);
hr = g_pMouse->SetEventNotification(hevtMouse);
//Wenn ich die Maus hier Acquiriere erfolgt noch kein Absturz
memset(&MouseData, 0, sizeof(DIDEVICEOBJECTDATA));
dwNumElements = 1;
if ( FAILED(hr) )
return hr;
return S_OK;
}
DIMOUSESTATE DXInput::GetMouseState()
{
HRESULT hr;
if( g_pMouse->GetDeviceState( sizeof(DIMOUSESTATE), &MouseData) == DIERR_INPUTLOST) //hier kommt der Crash
{
if( g_pMouse->Acquire() == DI_OK)
hr = g_pMouse->GetDeviceState( sizeof(DIMOUSESTATE), &MouseData);
}
return MouseData;
}
void DXInput::DI_Term()
{
if (NULL != g_pMouse)
{
g_pMouse->Unacquire();
g_pMouse->Release();
g_pMouse = NULL;
}
if (NULL != g_pDI)
{
g_pDI->Release();
g_pDI = NULL;
}
}
Wäre echt toll wenn mir jemand aus der Patsche helfen könnte... Wenns um Speicherkonflikte geht weiss ich meistens nicht mehr aus noch ein.
Zuletzt bearbeitet: