JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=055d1c9e188b6ab0e607a701bb161c7aMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Fehler bei Direct Input Klassen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Leax
Mini JLI'ler



Anmeldedatum: 15.07.2003
Beiträge: 43

Medaillen: Keine

BeitragVerfasst am: 14.10.2003, 19:50    Titel: Fehler bei Direct Input Klassen Antworten mit Zitat

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(7Cool : 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
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 47
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 14.10.2003, 22:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Leax
Mini JLI'ler



Anmeldedatum: 15.07.2003
Beiträge: 43

Medaillen: Keine

BeitragVerfasst am: 15.10.2003, 15:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum