JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Probleme mit DirectX
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
matmaster
Junior JLI'ler



Anmeldedatum: 18.02.2006
Beiträge: 67
Wohnort: Wien
Medaillen: Keine

BeitragVerfasst am: 02.05.2006, 15:06    Titel: Probleme mit DirectX Antworten mit Zitat

Hallo
Ich habe ein Problem:
Der Debugger hat festgestellt das die Header-Datei "dsound.h", die bei der
DirectX SDK dabei ist, Fehler hat.

Hier der code-ausschnnit mit dem Fehler:
Code:

    typedef struct _DSEFFECTDESC
    {
        DWORD       dwSize;
        DWORD       dwFlags;
        GUID        guidDSFXClass;
        DWORD_PTR   dwReserved1;
        DWORD_PTR   dwReserved2;
    } DSEFFECTDESC, *LPDSEFFECTDESC;
    typedef const DSEFFECTDESC *LPCDSEFFECTDESC;

Die Fehler:
Code:

c:\entwicklung\directx9\include\dsound.h(305) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'dwReserved1'
c:\entwicklung\directx9\include\dsound.h(305) : error C2501: 'DWORD_PTR' : Fehlende Speicherklasse oder Typbezeichner
c:\entwicklung\directx9\include\dsound.h(305) : error C2501: 'dwReserved1' : Fehlende Speicherklasse oder Typbezeichner
c:\entwicklung\directx9\include\dsound.h(306) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'dwReserved2'
c:\entwicklung\directx9\include\dsound.h(306) : error C2501: 'DWORD_PTR' : Fehlende Speicherklasse oder Typbezeichner
c:\entwicklung\directx9\include\dsound.h(306) : error C2501: 'dwReserved2' : Fehlende Speicherklasse oder Typbezeichner
Fehler beim Ausführen von cl.exe.


Wie kann das sein, dass eine Header-Datei die bei der SDK dabei ist Fehler hat ?

vor ca. einer Woche hats noch funktioniert, der Fehler ist seit dem ich die DirectX SDK neuinstalliert habe.

Kann mir jemand helfen ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 02.05.2006, 15:16    Titel: Antworten mit Zitat

Die Datei ist wahrscheinlich korrekt, deine Datei hat den Fehelr Wink
Wenn du vor dem include der Headerdatei selber irgendwas geschreiben hast und da ein ; vergessen hast, fehtl es dem Compiler erst wenn in der includierten Datei irgendwas steht (zum Beispiel diese Typendefinition). Schreibst du zum Beispiel:
CPP:
#inlcude "meinedatei";
#include<dxdatei>


und in meinedatei:
CPP:
struct
{
float X;
}


kommt in dxdatei ein Fehler weil hinter der Struct in meinedatei ein ; fehlt.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 02.05.2006, 15:16    Titel: Antworten mit Zitat

du solltest windows.h vor der header inkludieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
matmaster
Junior JLI'ler



Anmeldedatum: 18.02.2006
Beiträge: 67
Wohnort: Wien
Medaillen: Keine

BeitragVerfasst am: 02.05.2006, 15:26    Titel: Antworten mit Zitat

Ich glaube nicht das meine datei ein Fehler hat, weil es nicht meine datei ist sondern vom Autor
Datei : DXAudio

@DirectXer
Funktioniert leider trotzdem nicht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Blubb-Tec
JLI'ler


Alter: 33
Anmeldedatum: 29.03.2005
Beiträge: 171
Wohnort: Düsseldorf
Medaillen: Keine

BeitragVerfasst am: 02.05.2006, 15:28    Titel: Antworten mit Zitat

gib mal die komplette inkludier reihenfolge, dann lässt sich der fehler bestimmt schneller finden Very Happy
_________________
www.planlos.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
matmaster
Junior JLI'ler



Anmeldedatum: 18.02.2006
Beiträge: 67
Wohnort: Wien
Medaillen: Keine

BeitragVerfasst am: 02.05.2006, 15:34    Titel: Antworten mit Zitat

@Bulbb-Tec
Die "dsound.h" ?
die hat über 1000 Zeilen Code
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 02.05.2006, 15:39    Titel: Antworten mit Zitat

matmaster hat Folgendes geschrieben:
Ich glaube nicht das meine datei ein Fehler hat, weil es nicht meine datei ist sondern vom Autor
Datei : DXAudio

@DirectXer
Funktioniert leider trotzdem nicht.

Dann guck halt da nach. Irgendwo muss ja das ; fehlen. Wenn der Fehelr ganz oben in der dsoudn auftritt dann fehlt das ; garantiert in der Datei die die dsound includiert oder in der Datei die vor der dsound inkludiert wird.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
matmaster
Junior JLI'ler



Anmeldedatum: 18.02.2006
Beiträge: 67
Wohnort: Wien
Medaillen: Keine

BeitragVerfasst am: 02.05.2006, 15:52    Titel: Antworten mit Zitat

Es fehlt nirgendwo ein Semikolon ( ; ) Sad
Das Problem ist, dass die Datei "dsound.h" gar nicht includiert wird
aber trozdem zeigt der Debugger das Sie ein Fehler hat
Die einzige Datei die includiert wird ist : "dmusici.h"
und vor der includierung von "dmusici.h" steht kein Code
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 02.05.2006, 16:31    Titel: Antworten mit Zitat

also. Razz (edit: lies erst den teil unten bei EDIT Wink )

du sollst zuerst die komplette/kompletten Header (oder mindst. die ersten Zeilen, wo alle inkludes drin sind, posten), die <dmusici.h> inkludieren- Wenn die dmusici.h nicht als erstes inkludiert wird:

poste die header datei, die vor dmusici inkludiert wird. Ansonsten: poste den/die header, die die header datei, die die dmusici.h inkludiert, inkludieren. Usw. usf. , das meinten wir mit Inkludereihenfolge.

Kleienr Tipp: es wird oft ein Semikolon hinter Klassen vergessen, also sowas:
CPP:
// Klasse.h

class XYZ
{
...
}; // <-- wird oft vergessen, weiß ich aus erfahrung ;)

CPP:
// Soundmanager.h

#include "klasse.h"
#include <dmusici.h> // <-- da gibts den Fehler. Der wird dir in dsound.h angezeigt, weil dsound.h der erste header ist, den dmusici.h inkludiert


Gruß DXer

EDIT: HALT! bevor du das alles macht, guck erstmal, hier: Es kann auch sein, dass einfach der DWORD_PTR bei dir net deklariert wird. Der wird norm. in einer von der windows.h inkludierten headerdatei definiert, vllt hast du da aber veraltete/andere header, die den net definieren. Deshalb such erstmal nach der Definition Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
matmaster
Junior JLI'ler



Anmeldedatum: 18.02.2006
Beiträge: 67
Wohnort: Wien
Medaillen: Keine

BeitragVerfasst am: 02.05.2006, 16:55    Titel: Antworten mit Zitat

Zitat:

du sollst zuerst die komplette/kompletten Header (oder mindst. die ersten Zeilen, wo alle inkludes drin sind, posten), die <dmusici.h> inkludieren- Wenn die dmusici.h nicht als erstes inkludiert wird:


sorry Sad , verstehe nicht ganz

hier der Code vom programm das nicht läuft:
CPP:
#include <dmusici.h>

// Anwendungsfenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance);

// Callback Funktion zur Nachrichtenbehandlung
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);

// DirectXAudio initialisieren
BOOL InitDirectXAudio(void);

// Objekte/Speicher freigeben
void CleanUpDirectXAudio(void);

// Fehlermeldung erzeugen
BOOL Error(char* msg);


// Das Fensterhandle
HWND hWnd = 0;

IDirectMusicLoader8*      lpLoader       = NULL;
IDirectMusicPerformance8* lpPerformance  = NULL;
IDirectMusicSegment8*     lpSegment1     = NULL;
IDirectMusicSegment8*     lpSegment2     = NULL;

// Windows main-Funktion
int WINAPI WinMain(HINSTANCE hInstance,      // Handle der Programminstanz
                   HINSTANCE hPrevInstance,  // Handle der letzten Instanz
                   LPSTR lpCmdLine,          // Kommandozeile
                   int nCmdShow)             // Art wie das Fenster angezeigt werden soll
{   
    MessageBox(NULL,"Dieses Programm spielt eine MIDI-Datei ab.\n"
                    "Wenn Sie F1 drücken, wird zusätzlich ein Soundeffekt abgespielt.\n\n"
                    "F1 - Soundeffekt abspielen",
                    "Beschreibung",MB_OK);
   
   
    // Fenster erzeugen und Handle speichern
    hWnd = CreateMainWindow(hInstance);

    // Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten
    if(0 == hWnd)
    {
        MessageBox(0,"Fenster konnte nicht erzeugt werden","Fehler",MB_OK);
        return -1;
    }

    // DirectXAudio initialisieren
    if(!InitDirectXAudio())
    {
        return 0;
    }

    lpPerformance->PlaySegmentEx(
        lpSegment1,           // abzuspielendes Segment
        NULL,       
        NULL,       
        DMUS_SEGF_SECONDARY,  // im sekundären Buffer
        0,                    // Stelle, an der gestartet werden soll
        NULL,       
        NULL,       
        NULL         
    );     

    // Struktur, in der Informationen zur Nachricht gespeichert werden
    MSG msg = { 0 };
   
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    CleanUpDirectXAudio();

    // Rückgabewert an Windows
    return 0;
}


int InitDirectXAudio(void)
{   
    // COM initialisieren

    CoInitialize(NULL);
   
    CoCreateInstance(CLSID_DirectMusicPerformance, NULL,
                     CLSCTX_INPROC, IID_IDirectMusicPerformance8,
                     (void**)&lpPerformance );
   
    CoCreateInstance(CLSID_DirectMusicLoader, NULL,
                     CLSCTX_INPROC, IID_IDirectMusicLoader8,
                     (void**)&lpLoader);


    // Initialisieren
    lpPerformance->InitAudio(
        NULL,                 
        NULL,                 
        NULL,                 
        DMUS_APATH_DYNAMIC_STEREO,
        8,                   
        DMUS_AUDIOF_ALL,       
        NULL                   
    );
   
    // Suchpfad auswählen
    WCHAR wstrSearchPath[MAX_PATH];
    MultiByteToWideChar( CP_ACP, 0, "../../media", -1, wstrSearchPath, MAX_PATH );
 
    // Suchpfad setzen
    lpLoader->SetSearchDirectory(GUID_DirectMusicAllTypes, 
        wstrSearchPath,           
        FALSE                     
    );
 
    // Name der MIDI-Datei
    WCHAR wstrFileName1[MAX_PATH];

    MultiByteToWideChar( CP_ACP, 0, "open.mid", -1, wstrFileName1, MAX_PATH );

    if (FAILED(lpLoader->LoadObjectFromFile(
        CLSID_DirectMusicSegment, 
        IID_IDirectMusicSegment8, 
        wstrFileName1,             
        (LPVOID*) &lpSegment1)))
    {
        MessageBox( NULL, "Fehler beim Laden der Datei", "Fehler", MB_OK );
        return FALSE;
    }


    // Segment hinzufügen
    lpSegment1->Download( lpPerformance );


    // Name des Soundeffekts
    WCHAR wstrFileName2[MAX_PATH];

    MultiByteToWideChar( CP_ACP, 0, "silence.wav", -1, wstrFileName2, MAX_PATH );
   
    if (FAILED(lpLoader->LoadObjectFromFile(
        CLSID_DirectMusicSegment, 
        IID_IDirectMusicSegment8, 
        wstrFileName2,             
        (LPVOID*) &lpSegment2)))
    {
        MessageBox( NULL, "Fehler beim Laden der Datei", "Fehler", MB_OK );
        return FALSE;

    }

    // Segment hinzufügen
    lpSegment2->Download( lpPerformance );

    return TRUE;
}


// Fenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance)
{
    WNDCLASSEX wndClass =
    {
        sizeof(WNDCLASSEX),                                 // Größe angeben
        CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW,    // Standardstile       
        MessageHandler,                                     // Callback-Funktion
        0,                                                  // Zusätzliche Angaben
        0,                                                  // nicht benötigt
        hInstance,                                          // Anwendungsinstanz
        LoadIcon(NULL, IDI_WINLOGO),                        // Windows-Logo
        LoadCursor(NULL, IDC_ARROW),                        // Normaler Cursor
        (HBRUSH)GetStockObject(WHITE_BRUSH),                // Weißer Pinsel
        NULL,                                               // kein Menü
        "WindowClass",                                      // Der Name der Klasse
        LoadIcon(NULL, IDI_WINLOGO)                         // Windows Logo
    };

    // Klasse registrieren
    RegisterClassEx(&wndClass);

    return CreateWindowEx(NULL,                   // Keine erweiterten Stile nutzen
                          "WindowClass",          // Klassenname
                          "DXAudio",              // Fenstertitel
                          WS_OVERLAPPEDWINDOW |   // Fenster
                          WS_VISIBLE,             // Eigenschaften
                          0, 0,                   // Anfangsposition
                          400, 300,               // und Größe des Fensters
                          NULL,                   // Handle des Elternfensters
                          NULL,                   // Handle des Menüs
                          hInstance,              // Anwendungsinstanz
                          NULL);                  // wird nicht benötigt
}



// Diese Funktion wird von Windows aufgrufen, wenn
// eine Nachricht für Ihr Programm vorliegt
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    // testen, um welche Nachticht es sich handelt
    switch(msg)
    {
        case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
           break;

        case WM_KEYDOWN:
         switch(wParam)
         {
            case VK_ESCAPE:                     
                    DestroyWindow(hWnd);
                break;

                case VK_F1:
                        // Segment abspielen
                        lpPerformance->PlaySegmentEx(
                            lpSegment2,  // abzuspielendes Segment
                            NULL,       
                            NULL,       
                            DMUS_SEGF_SECONDARY,
                            0,           // Stelle, an der gestartet werden soll
                            NULL,       
                            NULL,       
                            NULL         
                        );     

                break;
            }
            break;
         
      break;           
    }

    // Wenn wir uns nicht um die Nachricht gekümmert haben wird sie
    // an die Standardnachrichtenverarbeitung von Windows geschickt
    return (DefWindowProc(hwnd, msg, wParam, lParam));
}

void CleanUpDirectXAudio(void)
{
    // Segment freigeben
    if(lpSegment1)
    {
        lpSegment1->Release();
        lpSegment1 = NULL;
    }

    // Segment freigeben
    if(lpSegment2)
    {
        lpSegment2->Release();
        lpSegment2 = NULL;
    }
 
    // performance freigeben
    if(lpPerformance)
    {
        lpPerformance->Stop(NULL,NULL,0,0);
        lpPerformance->CloseDown();
        lpPerformance->Release();
        lpPerformance = NULL;
    }

    // Loader freigeben
    if(lpLoader)
    {
        lpLoader->Release();
        lpLoader = NULL;
    }

    // COM beenden
    CoUninitialize();
}

Edit(Kampfhund): bitte "cpp"-tags statt "code"-tags verwenden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 02.05.2006, 20:26    Titel: Antworten mit Zitat

Hallo,

schreib mal vor

#include <dmusici.h> #include <windows.h>


also so Wink

CPP:
#include <windows.h>
#include <dmusici.h>


Das Problem ist, dass DWORD nicht definiert ist.

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
matmaster
Junior JLI'ler



Anmeldedatum: 18.02.2006
Beiträge: 67
Wohnort: Wien
Medaillen: Keine

BeitragVerfasst am: 03.05.2006, 04:53    Titel: Antworten mit Zitat

Hallo

Zitat:

schreib mal vor

#include <dmusici.h> #include <windows.h>

Funktioniert leider trozdem nicht. verstehe ich nicht.

Würde es etwas bringen wenn ich die DirectX SDK April
downloade ? Weil ja der Fehler in einer DirectX Header-Datei ist, sollte er nicht mehr vorhanden sein in der April version.
Der Fehler ist zum ersten mal am Montag aufgetreten, als ich DirectX neuinstalliert habe, vieleicht liegt es daran ? Ich habe es wieder so wie es im Buch steht installiert und jetzt funktioniert es nicht Sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 03.05.2006, 09:21    Titel: Antworten mit Zitat

Es liegt nicht an der Header-Datei, die ist nicht fehlerhaft, wenn du daran nichts geändet hast. Kannst du mir das Projekt zumailen? Christian(at) Rousselle.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
matmaster
Junior JLI'ler



Anmeldedatum: 18.02.2006
Beiträge: 67
Wohnort: Wien
Medaillen: Keine

BeitragVerfasst am: 03.05.2006, 15:38    Titel: Antworten mit Zitat

@Christian Rousselle
Das Projekt das bei mir nicht funktioniert ist ein Beispiel das Sie programmiert haben. Das ist das Beispiel aus "Kapitel 24 DXAUDIO" (ist auf der mitgelieferten CD dabei)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 03.05.2006, 16:15    Titel: Antworten mit Zitat

Es gibt mittlerweile drei Bücher, wobei das letzte einen anderen Compiler. Hast du die Version, in der CodeBlocks als Compiler verwendet wird?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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