Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

  • »Johannes Schneider« ist der Autor dieses Themas

Beiträge: 103

Beruf: Chemiestudent

  • Private Nachricht senden

1

04.07.2010, 15:15

DirectInput 8 treibt mich in den Wahnsinn!

Hallo zusammen.
Seit zwei Stunden suche ich den Fehler, aber ich finden ihn nicht :(

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <DInput.h>
#include <Windows.h>
#include <CommCtrl.h>
#include <string>

HWND hWnd;
LPDIRECTINPUT8 lpDirectInput=NULL;

LRESULT CALLBACK windowcallback(HWND,UINT,WPARAM,LPARAM);
BOOL CALLBACK EnumDevices(LPCDIDEVICEINSTANCE pDevice,void *pRef);

void CleanUpDirectInput(void)
{
    lpDirectInput->Release();
}

bool InitDirectInput(HINSTANCE inst)
{
    if(FAILED(DirectInput8Create(GetModuleHandle( NULL ), DIRECTINPUT_VERSION,IID_IDirectInput8, (void**)(&lpDirectInput), NULL))) return false;
    return true;
}

int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char* lpCmdLine, int nShowCmd)
{
    WNDCLASSEX wcx;
    wcx.cbClsExtra=NULL;
    wcx.cbSize=sizeof(WNDCLASSEX);
    wcx.cbWndExtra=NULL;
    wcx.hbrBackground=(HBRUSH)COLOR_WINDOW+4;
    wcx.hCursor=LoadCursor(hInstance,IDC_ARROW);
    wcx.hIcon=NULL;
    wcx.hIconSm=NULL;
    wcx.hInstance=hInstance;
    wcx.lpfnWndProc=(WNDPROC)windowcallback;
    wcx.lpszClassName=L"Klasse";
    wcx.lpszMenuName=NULL;
    wcx.style=CS_HREDRAW|CS_VREDRAW;
    
    if(!RegisterClassEx(&wcx))
        abort();

    if(!(hWnd=CreateWindowEx(NULL,L"Klasse",L"Fenster",WS_OVERLAPPEDWINDOW&~WS_SIZEBOX&~WS_MAXIMIZEBOX,CW_USEDEFAULT,CW_USEDEFAULT,500,500,NULL,NULL,hInstance,NULL)))
        abort();

    InitDirectInput(hInstance);
    lpDirectInput->EnumDevices(DI8DEVCLASS_ALL,EnumDevices,NULL,DIEDFL_ALLDEVICES);

    ShowWindow(hWnd,nShowCmd);
    UpdateWindow(hWnd);

    MSG msg;
    while(GetMessage(&msg,hWnd,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

HDC render;
PAINTSTRUCT ps;
LRESULT CALLBACK windowcallback(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CLOSE:
        {
            exit(0);
            break;
        }
    }
    return DefWindowProc(hWnd,msg,wParam,lParam);
}

BOOL CALLBACK EnumDevices(LPCDIDEVICEINSTANCE pDevice,void *pRef)
{
    wchar_t acText[1024];
    swprintf_s(acText,L"Ein Eingabegerät wurde gefunden!\n\nName %s\nProduktbezeichnung: %s",pDevice->tszInstanceName,pDevice->tszProductName);
    MessageBox(NULL,acText,L"",MB_OK);
    return DIENUM_CONTINUE;                 
}


Das Problem liegt scheinbar an Microsoft Visual C++ 2010 Express Edition. Das Teil is zu blöd, um die Libs selbst zu finden und eintragen kann ich sie auch nicht mehr, denn das sei laut Microsoft "veraltet". Und bei "Eigenschaften" im Projektmappenexplorer finde ich nur "Code-Verzeichnisse". Das hat mit Libs aber leider nichts zu tun :(

Kann mir bitte jemand helfen ??

Quellcode

1
2
3
4
5
6
1>------ Erstellen gestartet: Projekt: Direct3D Beginn, Konfiguration: Debug Win32 ------
1>  main.cpp
1>  c:\program files\microsoft sdks\windows\v7.0a\include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800
1>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_IID_IDirectInput8W".
1>T:\DirectX\Direct3D Beginn\Debug\Direct3D Beginn.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


[/code]


PS: wie bekomm ich die Lästige Meldung "DIRECTINPUT_VERSION undefined" weg ? Die nervt mich schon seit Ewigkeiten...

Danke für jede Hilfe
"Das Glück des Forschers besteht nicht darin, die Wahrheit zu besitzen, sondern eine Wahrheit zu erringen. Und in diesem fortschreitendem, erfolgreichen Suchen nach der Wahrheit - darin liegt die
eigentliche Befriedigung." Max Planck

2

04.07.2010, 15:17

Hast du dxguid.lib gelinkt ?

PS: Ich glaub du würdest mehr probleme haben, wenn vs versuchen würde die Verzeichnisse selber einzutragen :)

  • »Johannes Schneider« ist der Autor dieses Themas

Beiträge: 103

Beruf: Chemiestudent

  • Private Nachricht senden

3

04.07.2010, 15:28

Ich habs gefunden :)
MSVC hat nun einen neuen Eintrag in "Konfigurationsverweise".
Ich hatte unter Linker->Eingabe->Zus.Abh. den Pfad von dxguid.lib und dinput8.lib falsch angegeben (?).
Jedenfalls funktionierts nun.

Danke.
"Das Glück des Forschers besteht nicht darin, die Wahrheit zu besitzen, sondern eine Wahrheit zu erringen. Und in diesem fortschreitendem, erfolgreichen Suchen nach der Wahrheit - darin liegt die
eigentliche Befriedigung." Max Planck

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

04.07.2010, 15:31

Ich würde dir von DirectInput sowieso abraten. Wenn du nur Maus/Tastatur willst dann verwend einfach Windows Messages oder Raw Input. Mircosoft selber rät davon ab DirectInput noch zu verwenden außer z.B. wenn du einen ForceFeedback Joystick ansteuern willst.

5

04.07.2010, 15:31

Zitat

Ich hatte unter Linker->Eingabe->Zus.Abh. den Pfad von dxguid.lib und dinput8.lib falsch angegeben (?).

Bist du sicher, dass du weißt, was du da tust ? ;)
Die Verzeichnisse kommen in "VC++ Directories" zu Lib, und in Linker-Input-Zus.Abh. kommt nur der name, also z.B. dxguid.lib
Mit den deutschen Pfaden kann ich allerdings nich dienen :)

unsigned long

Treue Seele

Beiträge: 140

Wohnort: Herzogenrath

Beruf: Fachinformatiker Fachrichtung Anwendungsentwicklung

  • Private Nachricht senden

6

06.07.2010, 10:47

Das Problem liegt scheinbar an Microsoft Visual C++ 2010 Express Edition. Das Teil is zu blöd, um die Libs selbst zu finden ...
Wie sich heraus gestellt hat, lag es (wen wunderts?) nicht an Express, sondern an dir. Der Fehler liegt generell immer erst bei so einem großen Produkt an ISO-OSI-Layer 8.
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.'
[ bing | not'a'tric | germangamedev | Fragen richtig stellen ]

Werbeanzeige