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

1

21.05.2003, 19:40

C++ Problem (Einsteigerfrage)

Hallo,

tut mir echt leid, dass ich Euch mit so einem dummen Einsteigerproblem nerven muss, aber ich habe seit einigen Jahren kein C mehr programmiert und bin anscheind etwas aus der Uebung.

Ich habe das erste Beispielprogramm auf Seite 92/93 im Buch abgetippt und es laeuft auch ohne Probleme bei mir. Dann habe ich mir gedacht, dass ich aus Neugier mir auch die anderen Daten innerhalb der D3DADAPTER_IDENTIFIER9-Struktur anzeigen lasse. Ich habe deshalb die sprintf-Anweisung (S.93 unten) folgendermassen erweitert:

sprintf(acAdapterInfo,
"adapter-ID: %d\n"
"description: %s\n"
"driver: %s\n"
"driver version: %d\n"
"device name: %s\n"
"vendorID: %d\n"
"deviceID: %d\n"
"subsys ID: %d\n"
"revision: %d\n"
"WHQL level: %d",
iAdapter,
g_pAdapters[iAdapter].Description,
g_pAdapters[iAdapter].Driver,
g_pAdapters[iAdapter].DriverVersion,
g_pAdapters[iAdapter].DeviceName,
g_pAdapters[iAdapter].VendorId,
g_pAdapters[iAdapter].DeviceId,
g_pAdapters[iAdapter].SubSysId,
g_pAdapters[iAdapter].Revision,
g_pAdapters[iAdapter].WHQLLevel);


Leider schmiert er entweder ab oder bringt ab dem DeviceName voellig unsinnige Werte. Fuer mich sieht das sehr wie ein Speicherfehler aus und meine erste Vermutung war, dass der Speicherbereich fuer acAdapterInfo nicht ausreichend ist. Aber selbst wenn ich wesentlich mehr Speicher fuer diesen Puffer reserviere, aendert sich ueberhaupt nichts.

Weiss jemand von Euch wo mein Denkfehler ist und was ich falsch mache?
(Bei solchen Problemen sehne ich mich echt wieder zurueck an Java, sprachlich ist es imho C++ total ueberlegen, nur leider zu lahm fuer 3D-Spiele.)

Danke

2

21.05.2003, 20:02

c++ kann alles was java auch kann, nur keinen müll sammeln :D

zu deinem problem: du musst alles als einen string schreiben:

Quellcode

1
sprintf(acAdapterInfo, "adapter-ID: %d\ndescription: %s\ndriver: %s[...]", iAdapter, g_pAdapters[iAdapter].Description, g_pAdapters[iAdapter].Driver [...]);


ps: du kann auch den code-tag benutzen, sieht besser aus:
code anfang: [ code] (ohne leerzeichen am anfang)
code ende: [ /code]

edit: wups, ich merk grade, dass das gar nich schön aussieht...
zu deiner info: es soll alles in einer zeile sein :)
stay tight, project universe comes back!
### project earth <> 2004 ###

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

21.05.2003, 20:11

Zitat von »"neonew"«

du musst alles als einen string schreiben

Nein, das müsste so auch gehen. C++-Compiler merken, wenn man mehrere Strings hintereinanderschreibt und machen einen einzigen draus. Schau mal bei meiner Engine z.B. in die Datei tbFont.cpp, da habe ich das auch gemacht.

4

21.05.2003, 20:34

oh, wieder was dazugelernt :D

wo liegt dann der fehler?
stay tight, project universe comes back!
### project earth <> 2004 ###

5

21.05.2003, 21:11

Zur Sicherheit habe ich es nochmal mit einem einzigen grossen String ausprobiert, es hat aber leider nicht geholfen. :-(

Debugging hat mir aucht nicht zu sehr geholfen. Er zeigt mir nur an, was ich schon weiss, dass in den Variablen seltsame Zahlen stehen.

Sobald ich herausgefunden habe, wo mein Problem liegt, werde ich es hier posten. Trotzdem danke fuer den Vorschlag.

6

22.05.2003, 20:04

Hast du schon mal probiert deinen Speicherbreich zu vergrößern? Vieleicht ist er ja nur zu klein (MAX_DEVICE_IDENTIFIER_STRING ist ja 512Byte groß). Das würde zu einem Absturz führen. Dann könnte evntl. LARGE_INTEGER schwierigkeiten verursachen, da 64Bit groß (Bin mir da jetzt aber nicht sicher). Benutzt einfach das Low & Height Word.

Aus der DX 9 Doku

Zitat

Product = HIWORD(DriverVersion.HighPart)
Version = LOWORD(DriverVersion.HighPart)
SubVersion = HIWORD(DriverVersion.LowPart)
Build = LOWORD(DriverVersion.LowPart)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige