DLL im gleichen Ordner?

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • DLL im gleichen Ordner?

    Hallo

    Ich habe eine Frage:

    Muss die DLL Datei wirklich immer im gleichen Ordner sein wie die GM-Exe bzw. .gmk? Kann man nicht im Script das die DLL Datei und die Exe verbindet einen Pfad angeben, wo die DLL ist?

    Danke für eure hilfe.
    :thumbsup:
  • Nein, normalerweise nicht. In seltenen Fällen kann es aber vorkommen, am häufigsten bei Wrappern, da man hier meistens nur den Pfad zur Wrapper-dll angeben kann und die eigentliche dll im Hauptverzeichnis vermutet wird. Aber sonst kannst du dlls auch in Unterordnern lagern, sofern du im Initialisierungsscript den Pfad anpasst.

    © 2008 by Teamgrill Productions
  • peini schrieb:

    Man kann die DLL also auch nach C:\Windows\System32 kopieren und sie werden gefunden.


    Sowas zu tun ist aber eine Unart, die man sich wieder abgewöhnen sollte. Wenn du dort DLLs hin kopierst, die du beim Entfernen des Programms liegen lässt, müllst du damit das System des Benutzers zu. Und sobald du irgendwelche Anstalten machst, das bei der Deinstallation wieder zu entfernen, musst du dich darum kümmern, ob es nicht noch andere Programme gibt, die diese DLL benutzen (und die deine dann bei ihrer Installation überschrieben haben oder umgekehrt).

    Soll heißen, lediglich Bibliotheken oder Frameworks, die Funktionalität für andere Programme bereitstellen, sollten DLLs bei ihrer Installation nach System32 kopieren; Programme sollten ihre eigenen Dateien (bis auf Nutzerdaten oder -einstellungen) im eigenen Verzeichnis behalten.

    Um bei diesem Wrapper zu bleiben: Wenn du den Wrapper eigenständig auslieferst, dann kannst du einen Installer schreiben, der das die DLL nach System32 kopiert und beim Deinstallieren wieder entfernt. Programme, die die dann nutzen, liefern sie dann selbst nicht mehr aus. Das hat den Nachteil, dass diese Programme dann deine DLL als Abhängigkeit aufweisen, und man sich erst die DLL installieren muss, wenn man das Programm benutzen will (solches Verhalten kann man übrigens beim .NET-Framework beobachten). Auf diese Weise weiß man dann ganz genau, dass die Programme selbst das System nicht zumüllt, dass man mit dem Deinstaller der DLL alles entfernt, was mit dem Wrapper zu tun hat, und dass man dann selbst die Schuld trägt, wenn man doch noch ein Programm besitzt, dass diese DLL nutzen will.

    Zurück zum eigentlichen Thema: Dem Tag dieses Threads zufolge geht es um den GM8. Seit GM7 sollte man DLLs nicht mehr direkt einbinden, was auch im entsprechenden Kapitel er Hilfe erwähnt wird; die Funktionen "external_define" und co sind nur noch aus Kompatibilitätsgründen vorhanden. Stattdessen soll man sich eine Extension basteln: Man nehme den Extension Maker, lade dort seine DLL rein, gebe an, welche Funktionen man nutzen will, presse das ganze in eine *.gex, installiere diese im GM und schon kann man die Funktionen der DLL nutzen, als wären sie schon immer im GM eingebaut.

    Das hat zum einen den Vorteil, dass du dir diese Frage nach dem Pfad deiner DLLs gar nicht mehr stellen musst (die werden dann in der Exe mit ausgeliefert und beim Spielstart in ein temporäres Verzeichnis kopiert) und vermeidet zum anderen Fehler, die sich beim Benutzen von external_* gerne mal einschleichen.