|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
matmaster Junior JLI'ler
Anmeldedatum: 18.02.2006 Beiträge: 67 Wohnort: Wien Medaillen: Keine
|
Verfasst am: 02.05.2006, 15:06 Titel: Probleme mit DirectX |
|
|
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 02.05.2006, 15:16 Titel: |
|
|
Die Datei ist wahrscheinlich korrekt, deine Datei hat den Fehelr
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:
kommt in dxdatei ein Fehler weil hinter der Struct in meinedatei ein ; fehlt. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 02.05.2006, 15:16 Titel: |
|
|
du solltest windows.h vor der header inkludieren |
|
Nach oben |
|
|
matmaster Junior JLI'ler
Anmeldedatum: 18.02.2006 Beiträge: 67 Wohnort: Wien Medaillen: Keine
|
Verfasst am: 02.05.2006, 15:26 Titel: |
|
|
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 |
|
|
Blubb-Tec JLI'ler
Alter: 33 Anmeldedatum: 29.03.2005 Beiträge: 171 Wohnort: Düsseldorf Medaillen: Keine
|
Verfasst am: 02.05.2006, 15:28 Titel: |
|
|
gib mal die komplette inkludier reihenfolge, dann lässt sich der fehler bestimmt schneller finden _________________ www.planlos.de |
|
Nach oben |
|
|
matmaster Junior JLI'ler
Anmeldedatum: 18.02.2006 Beiträge: 67 Wohnort: Wien Medaillen: Keine
|
Verfasst am: 02.05.2006, 15:34 Titel: |
|
|
@Bulbb-Tec
Die "dsound.h" ?
die hat über 1000 Zeilen Code |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 02.05.2006, 15:39 Titel: |
|
|
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 |
|
|
matmaster Junior JLI'ler
Anmeldedatum: 18.02.2006 Beiträge: 67 Wohnort: Wien Medaillen: Keine
|
Verfasst am: 02.05.2006, 15:52 Titel: |
|
|
Es fehlt nirgendwo ein Semikolon ( ; )
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 |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 02.05.2006, 16:31 Titel: |
|
|
also. (edit: lies erst den teil unten bei EDIT )
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 |
|
Nach oben |
|
|
matmaster Junior JLI'ler
Anmeldedatum: 18.02.2006 Beiträge: 67 Wohnort: Wien Medaillen: Keine
|
Verfasst am: 02.05.2006, 16:55 Titel: |
|
|
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 , 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 |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 02.05.2006, 20:26 Titel: |
|
|
Hallo,
schreib mal vor
#include <dmusici.h> #include <windows.h>
also so
CPP: | #include <windows.h>
#include <dmusici.h>
|
Das Problem ist, dass DWORD nicht definiert ist.
C. |
|
Nach oben |
|
|
matmaster Junior JLI'ler
Anmeldedatum: 18.02.2006 Beiträge: 67 Wohnort: Wien Medaillen: Keine
|
Verfasst am: 03.05.2006, 04:53 Titel: |
|
|
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 |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 03.05.2006, 09:21 Titel: |
|
|
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 |
|
|
matmaster Junior JLI'ler
Anmeldedatum: 18.02.2006 Beiträge: 67 Wohnort: Wien Medaillen: Keine
|
Verfasst am: 03.05.2006, 15:38 Titel: |
|
|
@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 |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 03.05.2006, 16:15 Titel: |
|
|
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 |
|
|
|
|
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
|