#1 02.09.2012 14:19:41

Peter-Pascal
Member
Registriert: 26.02.2007
Beiträge: 63

Fehlerbehandlung bei DirectX

Hallo,

kann man bei DirectX API Aufrufe die Delphi eigenen Exceptions benutzen, bzw. ist das sinnvoll?

Im Wesentlichen wollte ich eine einheitliche Fehlerbehandlung, die die wichtigsten Funktionen wie Direkt3DCreate9, CreateDevice, IDirect3DDevice9.CreateVertexBuffer usw. überprüft.

Schön wäre es noch, wenn ein Protokoll alles wichtige notiert.

Hat jemand eine Idee, wie dabei vorzugehen ist?

Zuerst überlegte ich, ein eigenes Objekt TProtokoll zu schreiben und dort die Werte zum einen zu überprüfen und zu protokolieren. Dann erinnerte ich mich an die Exception von Delphi und ob die vielleicht sinnvoller sind, auch wenn eine Exception abgeleitet werden muss. Nur die Hilfe ist bei Delphi nicht sehr umfangreich und nicht alles nachzuvollziehen.

Gruß Peter


Heute ist nicht alle Tage – ich komm wieder, keine Frage

Offline

 

#2 03.09.2012 18:54:18

DerPeer
GodlikeMember
Ort: Berlin
Registriert: 04.02.2005
Beiträge: 1291

Re: Fehlerbehandlung bei DirectX

Hallo,

ich verstehe davon nicht SO viel, aber ich habe auch Schwierigkeiten, dein Anliegen zu verstehen. Die API-Calls (z.B. D3DXCreateVolumeTexture) geben zurück, ob es funktioniert hat. Sie werfen keine Exception. Du kannst natürlich - wenn du auf Exceptions stehst - die fraglichen Funktionsaufrufe kapseln, und bei Misslingen manuell eine Exception auslösen.

Reicht für dein Protokoll eine TStringList aus?

DerPeer

Offline

 

#3 05.09.2012 15:40:10

Peter-Pascal
Member
Registriert: 26.02.2007
Beiträge: 63

Re: Fehlerbehandlung bei DirectX

das habe ich soweit befürchtet, dass es schwierig wird bei DirektX eine einheitliche Fehlerbehandlung zu installieren.

Code: delphi

var
fdirect3d9: idirect3d9; // Verwaltungsschnittstelle

fdirect3d9 := direct3dcreate9(d3d_sdk_version);
if (fdirect3d9 <> nil) then ...

oder
var
ok: hresult;

 ok := d3ddevice.createvertexbuffer(lngevertexbuffer, fusage, ffvf, fpool,
      fvertexbuffer, nil);
    if ok = d3d_ok then


Es bleibt mir also nichts anderes übrig als mit if Abfragen den Fehler abzufangen? Leider verstehe ich von Exception auch nicht so viel. Hatte mir eine einheitliche Fehlerbehandlung erhofft. Geht wohl nicht.


Heute ist nicht alle Tage – ich komm wieder, keine Frage

Offline

 

#4 05.09.2012 16:25:02

Gnietschow
ProMember
Ort: Berlin
Registriert: 20.06.2007
Beiträge: 237

Re: Fehlerbehandlung bei DirectX

An sich kommst du um die If's nicht drumherum. Du könntest dir aber wenn du Exceptions nutzen möchtest einfach einen Wrapper bauen, der alle benutzten Funktionen kapselt und bei Bedarf mit Exceptions um sich wirft smile Ich würd dir sowieso raten dir ein kleines Framework zu bauen, statt direkt mit DirectX zu arbeiten. Macht vieles einfacher und übersichtlicher smile

MfGnietschow


Es gibt 10 Gruppen von Menschen - die die das Binärsystem verstehen und die anderen.  :-)
Vegetarier essen meinem Essen das Essen weg ;)
-------------------------------------------------------------------------------------------------------------------
Der Community-Hub für Videospiele: gameloop.io

Offline

 

#5 10.09.2012 18:23:59

Peter-Pascal
Member
Registriert: 26.02.2007
Beiträge: 63

Re: Fehlerbehandlung bei DirectX

Hallo Gnietschow,

vielen Dank für Deine Antwort.

Genauso hatte ich mir das vorgestellt, eine eigenständige Fehlerbehandlung in Objekte verpackt. Bei meiner Frage zu Beginn, bin ich von der irrigen Annahme ausgegangen, wenn DirektX einen Fehler hat, dass dann dadurch eine Exception ausgelöst wird, so was wie IO-Error. Wäre ja auch zu schön gewesen.

Und an so einem Framework arbeite ich, dauert nur. Es soll mir gerade alle administrativen Tätigkeiten mit DirectX abnehmen.

Gruß Peter


Heute ist nicht alle Tage – ich komm wieder, keine Frage

Offline

 

#6 11.09.2012 05:19:33

Lotipats
UltraMember
Registriert: 17.05.2005
Beiträge: 395

Re: Fehlerbehandlung bei DirectX

Ich möchte noch zu bedenken geben, dass Exceptions bzw. deren Behandlung "ziemlich teuer" sein können. Ich arbeite gerade im Low-End-Bereich, also mit Hardware die nur ein paar MHz, 8Bit und ein paar KB Speicher (RAM und Programmcode) hat. Hier gibt es erst keine Exceptions, da sie (oft) zu viel Rechenzeit verbrauchen und den Code enorm aufblähen.
Auf "dicken" Systemen - und im Vergleich zu dem, was ich aktuell nutze sind schon ein paar 100MHz und >1MB RAM "dick" - fällt dies natürlich nicht so stark ins Gewicht. Unbedacht angewendet können sie aber dennoch zu einem Problem werden.
Ich zitiere einfach mal:
[quote=http://www.delphi-treff.de/object-pascal/exceptions/]Die Einführung von Exceptions revolutionierte die gesamte Fehlerbehandlung. Sie sind sehr effektiv, wenn es um das Abfangen von Fehlern, den sog. Exceptions, geht. Jedoch ist vielen nicht bewusst, dass Exception-Blöcke auch das Programmieren mit angezogener Handbremse bedeuten können. Das Verwalten eines try/finally bzw. try/except verschlingt auch Rechenzeit. Ein Exception-Block sollte deswegen nicht in einer Schleife stehen, die mehrere tausend Mal durchlaufen wird.[...]

[http://www.delphi-treff.de/object-pascal/exceptions/]

LOTIPATS

Beitrag geändert von Lotipats (11.09.2012 05:21:51)

Offline

 

Brett Fußzeile

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson