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

Der Dude

Treue Seele

  • »Der Dude« ist der Autor dieses Themas

Beiträge: 73

Wohnort: Elleringhausen-City

Beruf: ITA

  • Private Nachricht senden

1

24.09.2004, 22:15

Problem mit der Funktion GetDirect3DParameters

Hallo,

leider bin ich noch mit dem Listing 2.22 beschäftigt. Alle Fehler sind soweit abgearbeitet bis auf die zwei Warnungen:
d:\Eigene Dateien\Tribase\INCLUDE\TBGUI.H(286): warning C4267: '=': Konvertierung von 'size_t' nach 'int', Datenverlust möglich

d:\Eigene Dateien\Tribase\INCLUDE\DSHOWBASECLASSES\WXUTIL.H(195): warning C4312: 'Typumwandlung': Konvertierung von 'LONG' in größeren Typ 'PVOID'

Aber nun zu meinem eigentlichen Problem. Die Funktion GetDirect3DParameters liefert immer TB_CANCELED zurück. Das Einstellungsfenster erscheint NIE und die Anwendung beendet sich. Komischer weise gibt es keine genauen Angaben in dem Logverzeichnis. Nur folgende Ausgabe:

_________ __ _____
/\___ ___\ /\_\ /\ __\
\/__/\ \__/ _ __\/_/_ \ \ \_\\ ____ _____ __
\ \ \ /\`´__\ /\ \ \ \ __\ /\ __\_ /\ __\ /´__`\
\ \ \ \ \ \/ \ \ \ \ \ \_\\\ \\_\ \\ \____\ /\ __/
\ \_\ \ \_\ \ \_\ \ \____\\ \___\ \ \____\\ \____\
\/_/ \/_/ \/_/ \/____/ \/__/ \/____/ \/____/

INFO: TriBase-Engine wird initialisiert... (TriBase.cpp, Zeile 83, Funktion (Unbekannt))
INFO: Initialisierung komplett! (TriBase.cpp, Zeile 101, Funktion (Unbekannt))
INFO: TriBase-Engine wird heruntergefahren... (TriBase.cpp, Zeile 110, Funktion (Unbekannt))
INFO: Alle Speicherbereiche freigegeben! (tbMemory.cpp, Zeile 116, Funktion (Unbekannt))
INFO: Herunterfahren abgeschlossen! (TriBase.cpp, Zeile 146, Funktion (Unbekannt))


Folgender maßen sieht der Source aus:
(ist eine Kopie aus dem Buch)

C-/C++-Quelltext

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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
// Kapitel 2

// Beispielprogramm 02

// ===================

// Auflisten aller Direct3D-Optionen und anschließende Erstellung

// einer Geräteschnittstelle (IDirect3DDevice9).

// Zu den Optionen gehören unter anderem:

// - Adapter und Gerätetyp

// - Videomodi

// - Multi-Sampling-Typen und -Qualitätsstufen

// - Hardware- oder Softwareverarbeitung?


#include <Windows.h>
#include <dxerr9.h>
#include "D:\\Eigene Dateien\\Tribase\\INCLUDE\\TriBase.h"
#include "D:\\Eigene Dateien\\Tribase\\Beispiele\\Allgemeines\\InitWindow.h"
#include "D:\\Eigene Dateien\\Tribase\\Beispiele\\Allgemeines\\Direct3DEnum.h"
#include "D:\\Eigene Dateien\\Tribase\\Beispiele\\Allgemeines\\InitDirect3D.h"
#include "Resource.h"

#pragma comment(lib, "tribased.lib")
#pragma comment(lib, "dxerr9.lib")
#pragma comment(lib, "d3d9.lib")


 
// ******************************************************************

// Render-Funktion

tbResult Render(float fNumSecsPassed)
{
    return TB_OK;
}

// ******************************************************************

// Move-Funktion

tbResult Move(float fNumSecsPassed)
{
    return TB_OK;
}

// ******************************************************************

// Windows-Hauptfunktion

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   char* pcCmdLine,
                   int iShowCmd)
{
    SDirect3DParameters Direct3DParameters;
    tbResult            Result;
    


    // TriBase-Engine initialisieren

    tbIndit();


    // Direct3D-Optionen abfragen (vom Benutzer gewählt)

    Result = GetDirect3DParameters(&Direct3DParameters);
    if(Result == TB_ERROR)
    {
        // Es trat ein Fehler auf!

        MessageBox(NULL, "Fehler beim Abzählen!", "Fehler",
                   MB_OK | MB_ICONEXCLAMATION);
        tbExit();
        return 1;
    }
    else if(Result == TB_CANCELED)
    {
        MessageBox(NULL, "Fehler beim Abzählen!", "Fehler",
                   MB_OK | MB_ICONEXCLAMATION);
        // Der Dialog wurde abgebrochen!

        tbExit();
        return 0;
    }



    // Fenster initialisieren. Die Größe hängt vom gewählten

    // Videomodus ab, der in der Parameterstruktur gespeichert ist.

    if(InitWindow(Direct3DParameters.VideoMode.Width, 
                    Direct3DParameters.VideoMode.Height, 
                      "Beispielprogramm Nr. 2: Direct3D-Abzählung", 
                      NULL)
)
    {
        // Fehler beim Erstellen des Fensters!

        MessageBox(NULL, "Fehler beim Erstellen des Fensters!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        tbExit();
        return 1;
    }

    // Direct3D mit den abgefragten Einstellungen initialisieren

    if(InitDirect3D(&Direct3DParameters,
                    g_hWindow))
    {
        // Fehler!

        MessageBox(g_hWindow, "Fehler beim Initialisieren von Direct3D!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        ExitWindow();
        tbExit();
        return 1;
    }

    
    // Nachrichtenschleife

    tbDoMessageLoop(Render, Move);

    
    // Direct3D und Fenster herunterfahren

    ExitDirect3D();
    ExitWindow();

    // Engine herunterfahren

    tbExit();

    return 0;
}

// ******************************************************************


Kann mir jemand sagen, wieso diese Funktion bzw. das Eigenschaftsfenster über die Buffer und Einstellungen nicht angezeigt wird?

Mfg
Der Dude
"Wenn ich morgens doppelt so schnell über den Flur laufe, kann ich 2 Minuten länger schlaften!" - leider war es ein Irrtum.

C++Amateur

Frischling

Beiträge: 50

Wohnort: irgendwo in der Milchstraße

Beruf: Schüler

  • Private Nachricht senden

2

03.04.2005, 12:13

Ich hab das gleiche Problem!
Weiß denn keiner eine Lösung?
Mein Quellcode ist aber ein bisschen anders(der von der Dude hat ein paar Fehler):

C-/C++-Quelltext

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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// Kapitel 2

// Beispielprogramm 02

// ===================

// Auflisten aller Direct3D-Optionen und anschließende Erstellung

// einer Geräteschnittstelle (IDirect3DDevice9).

// Zu den Optionen gehören unter anderem:

// - Adapter und Gerätetyp

// - Videomodi

// - Multi-Sampling-Typen und -Qualitätsstufen

// - Hardware- oder Softwareverarbeitung?


#include <Windows.h>
#include <TriBase.h>
#include "..\\InitWindow.h"
#include "..\\Direct3DEnum.h"
#include "..\\InitDirect3D.h"
#include "..\\Resource.h"

 
// ******************************************************************

// Render-Funktion

tbResult Render(float fNumSecsPassed)
{
    return TB_OK;
}

// ******************************************************************

// Move-Funktion

tbResult Move(float fNumSecsPassed)
{
    return TB_OK;
}

// ******************************************************************

// Windows-Hauptfunktion

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   char* pcCmdLine,
                   int iShowCmd)
{
    SDirect3DParameters Direct3DParameters;
   


    // TriBase-Engine initialisieren

    tbInit();


    // Direct3D-Optionen abfragen (vom Benutzer gewählt)

    tbResult Result = GetDirect3DParameters(&Direct3DParameters);
    if(Result == TB_ERROR)
    {
        // Es trat ein Fehler auf!

        MessageBox(NULL, "Fehler beim Abzählen!", "Fehler",
                   MB_OK | MB_ICONEXCLAMATION);
        tbExit();
        return 1;
    }
    if(Result == TB_CANCELED)
    {
        // Der Dialog wurde abgebrochen!

        tbExit();
        return 0;
    }



    // Fenster initialisieren. Die Größe hängt vom gewählten

    // Videomodus ab, der in der Parameterstruktur gespeichert ist.

    if(InitWindow(Direct3DParameters.VideoMode.Width,
                    Direct3DParameters.VideoMode.Height,
                      "Beispielprogramm Nr. 2: Direct3D-Abzählung",
                      NULL)
)
    {
        // Fehler beim Erstellen des Fensters!

        MessageBox(NULL, "Fehler beim Erstellen des Fensters!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        tbExit();
        return 1;
    }

    // Direct3D mit den abgefragten Einstellungen initialisieren

    if(InitDirect3D(&Direct3DParameters,
                    g_hWindow))
    {
        // Fehler!

        MessageBox(g_hWindow, "Fehler beim Initialisieren von Direct3D!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        ExitWindow();
        tbExit();
        return 1;
    }

   
    // Nachrichtenschleife

    tbDoMessageLoop(Render, Move);

   
    // Direct3D und Fenster herunterfahren

    ExitDirect3D();
    ExitWindow();

    // Engine herunterfahren

    tbExit();

    return 0;
}

// ****************************************************************** 


Die Log-Datei ist die gleiche.
Und genau so wie bei 'Der Dude' hat Result den Wert TB_CANCELED.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

3

03.04.2005, 12:46

also ich hab leider keine ahnung von getdirect3dparameters, aber das ist ja auch nur n zwischenschritt bevor man mit der tribase arbeitet. versuchts doch dann einfach mal mit

tbConfig cfg
tbDoConfigDialog(&cfg)

oder so ähnlich^^

C++Amateur

Frischling

Beiträge: 50

Wohnort: irgendwo in der Milchstraße

Beruf: Schüler

  • Private Nachricht senden

4

03.04.2005, 13:45

Dann bekomme ich einen Konfigurationsdialog.
Das ist auch richtig so, aber nachdem der Dialog aufgerufen wird soll ein Fenster im Fenstermodus oder Vollbildmodus kommen.
Gibt es vielleicht einen Ausweg ohne eine andere Funktion aufzurufen?
Im Beispiel aus dem Buch klappt nämlich alles.

Folgende Dateien sind dem Projekt beigefügt:

include:
Windows.h
TriBase.h
InitWindow.h
Direct3DEnum.h
InitDirect3D.h
Resource.h

gelinkt:
tribased.lib d3d9.lib dxerr9.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib d3dx9.lib

Dem Projekt hinzugefügt:

InitWindow.cpp
Direct3DEnum.cpp
InitDirect3D.cpp
D3DAbzählung.rc
Allgemeines.rc

Vielleicht habe ich da etwas vergessen.

C++Amateur

Frischling

Beiträge: 50

Wohnort: irgendwo in der Milchstraße

Beruf: Schüler

  • Private Nachricht senden

5

03.04.2005, 17:23

Ich bin jetzt schon ein bisschen weiter...(die allgemeines.rc war wohl doch nicht drinnen...)

Aber jetzt bekomme ich anstelle eines schönen Auswahlfensters 3 Fehler serviert:

Zitat von »"Fehlerfenster"«


--------------------Konfiguration: Direct3Dhelp1 - Win32 Debug--------------------
Kompilierung läuft...
source.cpp
c:\dokumente und einstellungen\nikolai\desktop\niko\c++\allgemeines.rc(20) : error C2143: Syntaxfehler : Fehlendes ';' vor 'constant'
c:\dokumente und einstellungen\nikolai\desktop\niko\c++\allgemeines.rc(20) : error C2501: 'LANGUAGE' : Fehlende Speicherklasse oder Typbezeichner
c:\dokumente und einstellungen\nikolai\desktop\niko\c++\allgemeines.rc(20) : fatal error C1004: Unerwartetes Dateiende gefunden
Fehler beim Ausführen von cl.exe.

Direct3Dhelp1.exe - 3 Fehler, 0 Warnung(en)


Weiß jemand was ich da machen kann?

C++Amateur

Frischling

Beiträge: 50

Wohnort: irgendwo in der Milchstraße

Beruf: Schüler

  • Private Nachricht senden

6

03.04.2005, 20:23

Kann mir keiner helfen?

7

04.04.2005, 21:09

Ich glaub die Fehler hatte ich auch mal. Ich weiß jetzt nicht mehr genau, wie ich das behoben hab. Hast du folgende Sachen schon gemacht?
tribase.lib, d3d9.lib, dxerr9.lib (nicht umbedingt nötig) in den Linker einbinden,
Allgemeines.h in der Ressourcendatei ganz am Anfang inkludieren (am besten im Editor öffnen),
TriBase.h, Resource.h, InitWindow.h, Direct3DEnum.h, InitDirect3D.h inkludieren.

Vielleicht hilft's euch.

C++Amateur

Frischling

Beiträge: 50

Wohnort: irgendwo in der Milchstraße

Beruf: Schüler

  • Private Nachricht senden

8

21.04.2005, 16:16

ja, das ist alles drinnen.
Zurzeit kopiere ich das Beispiel 2 aus Kapitel 2 immer damit es funktioniert, aber ich möchte irgendwann auch ein Spiel erstellen, bei dem ich mir nichts kopiert habe.
Ich hoffe mir kann jemand helfen.
Meine Seite übers Programmieren:
http://www.selfsite.de.vu

Werbeanzeige