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

  • »Spiele Programmierer« ist der Autor dieses Themas

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

1

26.03.2011, 13:15

Das Beispiel "Das erste Dreieck" funktioniert nicht!

Ich bin mit dem Buch "3D-Spieleprogrammierung mit DirectX und C++" von David Scherfgen eigentlich sehr zufrieden (Hab es schon weitgehend durchgelesen), doch schon das erste Beispiel mit dem Namen "Das erste Dreieck" erfolgreich zu starten, ist gar nicht so einfach.

Alle Zeilen mit der Funktion

C-/C++-Quelltext

1
TB_ERROR_DIRECTX("g_pD3D->CreateDevice", hResult, TB_ERROR); 

verursacht immer einen Fehler wie folgenden:
1>c:\xxx\allgemeines\initdirect3d.cpp(57) : error C3861: "DXGetErrorString9": Bezeichner wurde
nicht gefunden.
1>c:\xxx\allgemeines\initdirect3d.cpp(57) : error C3861: "DXGetErrorDescription9": Bezeichner wurde
nicht gefunden.

Wenn ich die Zeilen mit der TB_ERROR_DIRECTX-Prozedur auskommentiere lässt sich das Projekt kompilieren, doch die Funktion "GetDirect3DParameters" in der Prozedur "InitApplication" liefert immer TB_CANCELED zurück! :(

Ich bin echt verzweifelt ;(! Ich habe in C++ und mit der WinAPI auch noch nicht so viel Erfahrung. (im Gegensatz zu VB.Net und C#)

Ich hoffe hier kann mir jemand weiterhelfen. :)
Vielen Dank für eure Hilfe im voraus.

Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

2

26.03.2011, 13:22

Willkommen im Forum, Spiele Programmierer! :D

Also soweit ich weiß, sind beide Funktionen in DxErr9.h enthalten. Hast du die Datei includiert?

Mfg Harry222

  • »Spiele Programmierer« ist der Autor dieses Themas

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

3

26.03.2011, 15:20

Auf meinen System befand sich nur eine DxErr.h und DxErr.lib. Beide habe ich kopiert und in DxErr9.h bzw. DxErr9.lib umbenannt.

Im übrigen waren auf meinen Computer auch die Dynamic Link Libraries
D3dx9_30.dll und D3dx9D_30.dll nicht zu finden. Als der Compilier meckerte, downloadede ich die D3dx9_30.dll, kopierte sie und gab der Kopie den Namen D3dx9D_30.dll.
(Informationen hierzu habe ich von hier.)

Im übrigen muss ich die verwendeten Ressurcen auf "nicht einbinden" stellen, da dem Compiler eine gewisse "mfc/afxres.h" nicht bekannt ist.

Seltsamerweise funktioniert das kompilieren und ausführen des Beispiels "Schatten mit dem Stencil-Buffer" problemlos.
DirectX SDK February 2010 ist vorbildlich installiert.

Hoffentlich helfen die zusätzlichen Informationen weiter.
Im übrigen danke für die freundliche Begrüßung. :)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (26.03.2011, 15:31)


Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

4

26.03.2011, 16:04

Auf meinen System befand sich nur eine DxErr.h und DxErr.lib. Beide habe ich kopiert und in DxErr9.h bzw. DxErr9.lib umbenannt.
Also erstens:
Warum hast du die Dateien umbennant? Vorallem bei .lib-Librarys sollte man das nicht machen, da dazu auch immer ein dll gehört!
Allerdings weiß ich nicht, ob das zu Problemen führen kann!

Im übrigen muss ich die verwendeten Ressurcen auf "nicht einbinden" stellen, da dem Compiler eine gewisse "mfc/afxres.h" nicht bekannt ist.
Dass du die Resourcen auf "nicht einbinden" stellst, könnte auch ein Problem sein ( Auch das weiß ich aber nicht genau ). Normalerweise muss man ( so weit ich weiß ) mfc/afxres.h durch windows.h ersetzen, was bei mir aber nie funktioniert hat ( kannst es trotzdem mal probieren ).
Bei mir hat es immer geholfen, dass Projekt nochmal komplett neu zu erstellen, und dann die nötigen .cpp und .h-Dateien einfach hinzuzufügen!

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

5

26.03.2011, 17:27

Verunfriemele erstmal dein System in dem du alle Dateien, die nur irgendwo kopiert hast oder unbenannt hast komplett loeschst. Danach laedst du mal das gesamte und neueste DX SDK runter und installiert das korrekt.

  • »Spiele Programmierer« ist der Autor dieses Themas

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

6

26.03.2011, 18:02

In neueren DirectX SDKs ist keine dxerr9.h mehr enthalten. Die neueren SDKs enthalten die Datei dxerr.h die aber den gleichen Zweck hat. Quelle: Hier


Was die Datei d3dx9_30.dll bzw d3dx9D_30.dll macht, weiß ich nicht. Aber ich glaube jede DirectX-SDK-Version hat ihre eigene. In meinen Systemordner befinden sich jedenfalls viele andere Datein, die sich von der d3dx9_30.dll nur in den hinteren Nummern unterscheiden.

Ich habe die GetDirect3DParameters-Funktion in der Datei Direct3DEnum.cpp schon angeschaut. Sie bestehet aus dem Code:

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
tbResult GetDirect3DParameters(SDirect3DParameters* pOut) 
{ 
     int iResult; 
     // Parameter prfen 
     if(pOut == NULL) TB_ERROR_NULL_POINTER("pOut", TB_ERROR); 

     // Direct3D-Schnittstelle erzeugen. Sie wird vom Dialog zur 
     // Auflistung bentigt. 
     g_pD3DTemp = Direct3DCreate9(D3D_SDK_VERSION); 
     //g_pD3DTemp = Direct3DCreate9(D3D9b_SDK_VERSION); 
     if(g_pD3DTemp == NULL) return TB_ERROR; 
     // Den globalen Zeiger auf die Struktur setzen, damit sie später 
     // gefüllt werden kann 
     g_pDirect3DParameters = pOut; 
     // Dialogfenster aufrufen 
     iResult = (int)(DialogBox(GetModuleHandle(NULL), 
     MAKEINTRESOURCE(IDD_DIRECT3D_SETTINGS), 
     NULL, 
     D3DEnumDialogProc)); 
     // Schnittstelle wieder freigeben 
     TB_SAFE_RELEASE(g_pD3DTemp); 
     // Rckgabewert des Dialogfensters auswerten 
     if(iResult == 0) return TB_OK; // Alles OK! 
     elseif(iResult == 1) return TB_ERROR; // Fehler! 
     else/*if(iResult == 2)*/return TB_CANCELED; // Dialog abgebrochen 
}

iResult enthält meist eine sehr große negative Zahl!


Nachtrag:
Ich glaube es liegt an der abgeschalteten Ressource! Die Ressource benötigt für das Windows-Fenster MFC! Wer nicht weiß, was das ist, sollte es bei Wikipedia nachlesen.
MFC ist erst bei der Kostenpflichtigen Version von Visual Studio enthalten. Weiß jemand was ich machen kann, um auch an den Genuß des Windows-Fensters zu kommen? Gibt es zu Visual-Studio 2008 kostenlose(sehr kostengüstige) Studenten-Editionen Schüler-Editionen ?
Ich hoffe hierzu weiß jemand Rat...

Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von »Spiele Programmierer« (26.03.2011, 18:26)


Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

7

26.03.2011, 19:50

Also mit MFC hat das eigentlich nichts zu tun! Ich habe oben bereits gesagt, dass du versuchen kannst mfc/afxres.h durch windows.h zu ersetzen und dann auch die Resourcen wieder einschalten.
Wenn GetDirect3DParameters dann immernoch Fehler zurückgibt, dann setz ein paar Breakpoints und geh die Funktion Schritt für Schritt durch!

  • »Spiele Programmierer« ist der Autor dieses Themas

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

8

26.03.2011, 21:26

Habe ich doch beides schon probiert!
1. GetDirect3DParameters mit Debugger durchgangen. Ergebnis: iResult enthält einen ungültigen
negativen Wert (Windows Handle?)!

2. Ersetzen mit windows.h funktioniert nicht (Ich habe es leider vergessen zu erwähnen)! Fehler bei LTEXT und COMBOBOX
Text in der Ressource:
// Microsoft Visual C++ generated resource script.
//
#include "Allgemeines.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "windows.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// Deutsch (Deutschland) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
#ifdef _WIN32
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
#pragma code_page(1252)
#endif //_WIN32

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE
BEGIN
"Allgemeines.h\0"
END

2 TEXTINCLUDE
BEGIN
"#include ""windows.h""\r\n"
"\0"
END

3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END

#endif // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_DIRECT3D_SETTINGS DIALOGEX 0, 0, 364, 236
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP |
WS_CAPTION | WS_SYSMENU
CAPTION "Direct3D-Einstellungen"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
LTEXT "Wählen Sie einen &Adapter:",IDC_STATIC,6,6,86,8
COMBOBOX IDC_D3DS_ADAPTERS,96,6,126,60,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "&Gerätetyp:",IDC_STATIC,6,24,36,8
COMBOBOX IDC_D3DS_DEVICE_TYPES,96,24,126,60,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Fenstermodus oder Vollbildmodus?",IDC_STATIC,6,48,78,18
CONTROL "&Fenstermodus",IDC_D3DS_WINDOWED_MODE,"Button",
BS_AUTORADIOBUTTON,96,48,61,10
CONTROL "&Vollbildmodus",IDC_D3DS_FULLSCREEN_MODE,"Button",
BS_AUTORADIOBUTTON,96,60,58,10
LTEXT "Vi&deomodus:",IDC_STATIC,6,78,42,8
COMBOBOX IDC_D3DS_VIDEO_MODES,96,78,126,120,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Bild&pufferformat:",IDC_STATIC,6,96,56,8
COMBOBOX IDC_D3DS_BACK_BUFFER_FORMATS,96,96,126,60,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "&Z-Stencil-Buffer-Format:",IDC_STATIC,6,114,79,8
COMBOBOX IDC_D3DS_Z_STENCIL_BUFFER_FORMATS,96,114,126,60,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Multi-Sampling-&Typ:",IDC_STATIC,6,132,64,8
COMBOBOX IDC_D3DS_MULTI_SAMPLING_TYPES,96,132,126,60,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Multi-Sampling-&Qualität:",IDC_STATIC,6,150,77,8
COMBOBOX IDC_D3DS_MULTI_SAMPLING_QUALITIES,96,150,126,60,
CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Ha&rdware oder Softwaretransformation und -Beleuchtung?",
IDC_STATIC,6,174,78,24
CONTROL "&Hardware",IDC_D3DS_HARDWARE_TNL,"Button",
BS_AUTORADIOBUTTON,95,175,47,10
CONTROL "&Software",IDC_D3DS_SOFTWARE_TNL,"Button",
BS_AUTORADIOBUTTON,95,185,44,10
DEFPUSHBUTTON "&OK",IDC_D3DS_OK,305,210,50,18
PUSHBUTTON "A&bbrechen",IDC_D3DS_CANCEL,251,210,50,18
LTEXT "Beschreibung und Hinweise:",IDC_STATIC,234,6,90,8
EDITTEXT IDC_D3DS_DESCRIPTION,234,18,120,187,ES_MULTILINE |
ES_AUTOVSCROLL | ES_READONLY | ES_WANTRETURN
PUSHBUTTON "Spe&ichern...",IDC_D3DS_SAVE,5,210,50,18
PUSHBUTTON "&Laden...",IDC_D3DS_LOAD,59,210,50,18
END


/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_DIRECT3D_SETTINGS, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 357
TOPMARGIN, 7
BOTTOMMARGIN, 229
END
END
#endif // APSTUDIO_INVOKED

#endif // Deutsch (Deutschland) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED


Ich kenne MFC nicht. Aber ich finde das richt verdammt stark nach den Microsoft Foundation Classes!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

26.03.2011, 23:21

Ja die MFC sind die Microsoft Foundation Classes. Die werden aber nicht wirklich benötigt, die stecken da nur drin da das Projekt eben noch für eine sehr alte Version von Visual Studio ist. Mit der aktuellen Express Edition von VC und dem aktuellen DX SDK läuft das nicht einfach so out of the Box da die Tribase mittlerweile halt schon etliche Jahre am Buckel hat. Wie du schon rausgefunden hast gibts in den neuen SDKs kein DXErr9.h mehr sondern nur ein DXErr.h. Die Funktionen aus diesem Header wie z.B. DXGetErrorString9 haben auch keine 9 mehr im Namen, mach also einfach überall wo der Fehler kommt DXGetErrorString draus etc. Die Frage wie man die Tribase mit aktuellen VS Versionen zum Laufen bekommt wurde hier auch schon sehr sehr oft ausführlich diskutiert, wenn du dich einfach ein bisschen umschaust solltest du genügend Anleitungen dazu finden, z.B. hier.

  • »Spiele Programmierer« ist der Autor dieses Themas

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

10

27.03.2011, 00:04

Der verlinkte Beitrag hat mir weiter geholfen! :)
Wenn ich TriBase als Release kompilieren will, so kommt immer der Fehler:
1>fatal error C1047: Die Objekt- oder Bibliotheksdatei "C:\xxx\Scherfgen CD\TriBase\Lib\strmbase.lib" wurde mit einem älteren Compiler als andere Objekte erstellt. Erstellen Sie die alten Objekte und Bibliotheken neu.

Was kann ich dagegen tun?

Ist eigentlich bekannt warum David Scherfgen das Überarbeiten und Neuaulegen des Buches eingestellte? Gibt es vieleicht Changen, das noch eine überarbeitete Neuauflage erscheint?

Werbeanzeige