[TIP] Prüfen, ob 3D-DLLs vorhanden.

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

[TIP] Prüfen, ob 3D-DLLs vorhanden.

Beitrag von Kaeru Gaman »

Die neue Version der 3D-Engine benötigt die VC6 Runtime-lib.
Diese ist bestandteil eines Up-to-Date-Windows,
aber z.b. nicht einer ursprünglichen Installation von Win2000.

Daher wäre es praktisch, das Vorhandensein dieser DLL zu überprüfen,
bevor man versucht, die 3D-Engine zu initiieren.

in diesem Zuge habe ich auch gleich eine Prüfung auf die Engine3D.dll hinzugefügt,
die in der Installation eures Games enthalten sein muss.

die benötigten DLL werden kurz versucht zu öffnen, dadurch ist sichergestellt,
dass die Prüfung auch die Standardpfade benutzt wie der InitEngine3D()-Befehl.
eine Umsetzung über FileSize und Umgebungsvariablen (PATH) wäre zwar denkbar,
aber ungleich komplizierter.

dieser Code dient als Beispiel.
der Fehlermeldungs-Text darf, aber muss nicht übernommen werden.

Code: Alles auswählen

; **************************************************
;
; Check for necessary DLLs
; before initiating the 3D-Engine
;
; by Kaeru Gaman, 2007-12-04
;
; **************************************************

; Check for Windows internal DLL
; DLL is not present e.g. on not updated win2000 systems

If OpenLibrary(0, "MSVCP60.dll")
  CloseLibrary(0)
Else
  out$ = "Die 3D-Engine benötigt die Version 6.0 der VC++ Runtime-Library. (MSVCP60.dll)" + #CRLF$ + #CRLF$
  out$ + "Diese DLL ist Bestandteil regulärer Updates des Betriebssystems." + #CRLF$
  out$ + "Bitte updaten Sie ihr Windows, oder laden Sie die DLL einzeln von der Microsoft-Homepage herunter."
  MessageRequester("3D-Engine Error: Betriebssystem unvollständig", out$, #MB_ICONERROR )
  End
EndIf

; Check for OGRE's Engine3D.dll 
; to buffer uncomplete install and such

If OpenLibrary(0, "Engine3D.dll")
  CloseLibrary(0)
Else
  out$ = "Die 3D-Engine benötigt die O.G.R.E. Runtime-Library. (Engine3D.dll)" + #CRLF$ + #CRLF$
  out$ + "Die Installation dieses Programms ist unvollständig oder fehlerhaft." + #CRLF$
  out$ + "Bitte installieren Sie dieses Produkt erneut."
  MessageRequester("3D-Engine Error: Installation unvollständig", out$, #MB_ICONERROR )
  End
EndIf
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
dige
Beiträge: 1241
Registriert: 08.09.2004 08:53

Beitrag von dige »

Danke für den Hinweis!!
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Mit deiner jetzt verwendeten Methode sollte doch sowieso die ganze PATH-Variable nach Ordnern mit dieser Datei abgegrast werden, oder nicht? :?
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

hardfalcon hat geschrieben:Mit deiner jetzt verwendeten Methode sollte doch sowieso die ganze PATH-Variable nach Ordnern mit dieser Datei abgegrast werden, oder nicht? :?
Jip.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

genau.
der versuch zu öffnen benutzt den standard-path.
mit FileSize müßte ich den manuell verfolgen, deshalb "ungleich komplizierter".

natürlich wird InitEngine3D() nicht ausgeführt, wenn eine der DLLs fehlt,
aber dessen rückmeldung lässt keinen rückschluß auf die ursache zu,
und ermöglicht so auch keine ausführliche fehlermeldung.
wer seinen Kunden ausführlicher informieren möchte, prüft also vorher die DLLs einzeln.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten