Seite 1 von 1

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

Verfasst: 04.12.2007 21:16
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

Verfasst: 05.12.2007 09:42
von dige
Danke für den Hinweis!!

Verfasst: 05.12.2007 14:28
von hardfalcon
Mit deiner jetzt verwendeten Methode sollte doch sowieso die ganze PATH-Variable nach Ordnern mit dieser Datei abgegrast werden, oder nicht? :?

Verfasst: 05.12.2007 17:54
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.

Verfasst: 05.12.2007 18:32
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.