 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Leax Mini JLI'ler

Anmeldedatum: 15.07.2003 Beiträge: 43
Medaillen: Keine
|
Verfasst am: 14.10.2003, 19:50 Titel: Fehler bei Direct Input Klassen |
|
|
Also ich komme absolut nicht weiter.
Folgender Code:
NC_DI_Init.h
Code: | #include <dinput.h>
#include "globales.h"
// Allgemeine Klasse für jedes Eingabegerät
class Geraeteerstellung
{
public:
LPDIRECTINPUT8 lpDI; // Direct Input(R) - Objekt
LPDIRECTINPUTDEVICE8 lpDIGeraet;
int DI_Init_general(HINSTANCE hinst, LPDIRECTINPUT8 lpDI);
};
// Klasse für eine Tastatur mit maximal 256 tasten
class Tastatur
{
private:
char Key_Buffer[256];
public:
int Tastatur_Init(LPDIRECTINPUT8 lpDI, LPDIRECTINPUTDEVICE8 lpDIGeraet, HWND hwnd);
//int Tastatur_Eingabe();
}; |
NC_DI_Init.cpp
Code: | #include <windows.h>
#include "NC_DI_Init.h"
#include <dinput.h>
#include "globales.h"
// Methoden-Implementierung der allgemeinen Geräteklasse
int Geraeteerstellung::DI_Init_general(HINSTANCE hinst, LPDIRECTINPUT8 lpDI)
{
if (FAILED(DirectInput8Create(hinst, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&lpDI, NULL)))
{
MessageBox(NULL, "Fehler beim Erstellen des Direct Input Objektes", "Fehlermeldung", MB_OK);
}
MessageBox(NULL, "KEIN Fehler beim Erstellen des Direct Input Objektes", "Fehlermeldung", MB_OK);
return (1);
}
// Methoden-Implementierung der Tastaturklasse
int Tastatur::Tastatur_Init(LPDIRECTINPUT8 lpDI, LPDIRECTINPUTDEVICE8 lpDIGeraet, HWND hwnd)
{
lpDIGeraet = NULL;
if (FAILED(lpDI->CreateDevice(GUID_SysKeyboard, &lpDIGeraet, NULL)))
{
MessageBox(NULL, "Fehler beim Erstellen des Tastaur-Objektes", "Fehlermeldung", MB_OK);
return 1;
}
if (FAILED(lpDIGeraet->SetDataFormat(&c_dfDIKeyboard)))
{
MessageBox(NULL, "Fehler beim Einstellen des Datenformates", "Fehlermeldung", MB_OK);
return 1;
}
if (FAILED(lpDIGeraet->SetCooperativeLevel(hwnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND)))
{
MessageBox(NULL, "Fehler beim Einstellen der Kooperationsebene", "Fehlermeldung", MB_OK);
return 1;
}
if (FAILED(lpDIGeraet->Acquire()))
{
MessageBox(NULL, "Fehler beim AKtivieren der Tastatur", "Fehlermeldung", MB_OK);
return 1;
}
else
{
MessageBox(hwnd, "Alles OK!!!", "Hinweis", MB_OK);
return 0;
}
} |
NC_DI_Main.cpp
Code: | #define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include "NC_DI_Init.h"
#include "globales.h"
LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam,
LPARAM lparam)
{
switch(message)
{
case WM_DESTROY:
{
PostQuitMessage(0);
return(0);
} break;
default:break;
} // switch
return (DefWindowProc(hwnd, message, wparam, lparam));
} // WindowProc
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprevinst,
LPSTR lpcmdline, int ncmdshow)
{
WNDCLASSEX winclass;
HWND hwnd;
MSG message;
const char szclassname[] = "Klassenname";
Geraeteerstellung Device;
Tastatur Keyboard;
winclass.cbSize = sizeof(WNDCLASSEX);
winclass.style = CS_HREDRAW | CS_VREDRAW;
winclass.lpfnWndProc = WindowProc;
winclass.cbClsExtra = 0;
winclass.cbWndExtra = 0;
winclass.hInstance = hinst;
winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
winclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
winclass.lpszMenuName = NULL;
winclass.lpszClassName = szclassname;
winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if (!RegisterClassEx(&winclass))
return(0);
if (!(hwnd = CreateWindowEx(NULL,
szclassname,
"3D Spieleprogrammierung - Titelleiste",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
0,0,
400,300,
NULL,
NULL,
hinst,
NULL)))
return(0);
ShowWindow(hwnd, ncmdshow); // überflüssig wenn WS_VISIBLE
UpdateWindow(hwnd); // überflüssig wenn WS_VISIBLE
while(GetMessage(&message,NULL,0,0))
{
TranslateMessage(&message);
DispatchMessage(&message);
} // while
Device.DI_Init_general(hinst, lpDI);
Keyboard.Tastatur_Init(lpDI, lpDIGeraet, hwnd);
return message.wParam;
} // WinMain |
wenn ich nun kompiliere, dann kommt leider eine Anreihung von fehlern:
Zitat: | --------------------Konfiguration: Windowfenster - Win32 Debug--------------------
Kompilierung läuft...
NC_Main.cpp
c:\dxsdk\include\dinput.h: DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800
c:\c++\nc_d3d_engine\windowfenster\nc_main.cpp(7 : error C2065: 'lpDI' : nichtdeklarierter Bezeichner
c:\c++\nc_d3d_engine\windowfenster\nc_main.cpp(79) : error C2065: 'lpDIGeraet' : nichtdeklarierter Bezeichner
Ueberspringen... (keine relevanten Aenderungen gefunden)
NC_DI_Init.cpp
Fehler beim Ausführen von cl.exe.
Windowfenster.exe - 2 Fehler, 0 Warnung(en) |
BITTE HELFT MIR!!!! |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 14.10.2003, 22:00 Titel: |
|
|
Naja, der Compiler sagt es dir doch schon, woher soll er denn hier:
Device.DI_Init_general(hinst, lpDI);
Keyboard.Tastatur_Init(lpDI, lpDIGeraet, hwnd);
lpDI und lpDIGeraet kennen? Du hast diese Variablen doch in der Klasse definiert und muss sie auch dort erstellen.
Christian |
|
Nach oben |
|
 |
Leax Mini JLI'ler

Anmeldedatum: 15.07.2003 Beiträge: 43
Medaillen: Keine
|
Verfasst am: 15.10.2003, 15:54 Titel: |
|
|
ok.
Danke
Das hab ich jetzt gemacht, aber es ging immer noch nciht.
Dann habe ich die Fehlerüberprüfung von SetCooperativeLevel umgeändert, da ein Fehlöer beim Einstellen Der Kooperaionsebene kam:
hr = lpDIGeraet->SetCooperativeLevel(hwnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
jetzt geht es komischer weiße.
Es scheint, als ob er ein Problem mit "hwnd" hat.... |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|