Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi dll in Systemordner suchen anstatt im Exe-Ordner (https://www.delphipraxis.net/11657-dll-systemordner-suchen-anstatt-im-exe-ordner.html)

HentaiD 11. Nov 2003 14:38


dll in Systemordner suchen anstatt im Exe-Ordner
 
Hallo,ich bins schon wieder!
Da soweit jetzt alles klappt :cheers: , habe ich nur noch ein Problem.
Von der unit , die ich benutze , um MOD Dateien abzuspielen , wird die dll im Ordner gesucht , wo sich auch die Executable befindet.
Das ist natürlich sehr schlecht!
Angenommen die *.exe ist auf einer CD gebrannt - was dann?Da lässt sich die dll nur schwer aus der *.exe auf die CD entpacken und dann wieder "free-en"

Ich würde der unit gerne sagen , dass die dll im Systemordner (also kein bestimmter - manche user haben ja anstatt einem "WINDOWS"- einen "WINNT"Ordner) zu suchen ist.
Im Moment sieht das folgendermaßen aus :

Delphi-Quellcode:
function BASSMOD_GetVersion: DWORD; stdcall; external 'bassmod.dll' name 'BASSMOD_GetVersion';
So zB..
Ich schätze in der Funktion steht wohl , dass die dll automatisch im Ordner der *.exe zu finden sein sollte.
Habe sonst nichts auffälliges in der unit gefunden.

Hoffe da hat jemand ne Lösung für mich , wie ich die dll Suche etwas ändern kann ;)

Greetz,D

Wormid 11. Nov 2003 15:04

Re: dll in Systemordner suchen anstatt im Exe-Ordner
 
Moin,

also hast du doch nicht vor, die DLL in die Resourcen deiner EXE zu packen? Das statische Linken der DLL wird nicht funktionieren, wenn du die sie erst zu Laufzeit extrahierst. (Wenn ich mich nicht irre :stupid: )
Wenn du die bassmod_dynamic.pas benutzt, kannst du dem Aufruf zum Laden der DLL den Pfad wo sie liegt mitgeben...

Delphi-Quellcode:
if Load_BASSMODDLL(DerPfadZurDLLStehtInDieserVariablen, 'bassmod.dll') then
begin
//...
end;
Ich hatte in dem andren Thread ein Beispiel gepostet, wie du die DLL ins Temp-Dir extrahierst und dann dynamisch einbindest! :warn: :mrgreen:


Gruß

Wormid

HentaiD 11. Nov 2003 15:09

Re: dll in Systemordner suchen anstatt im Exe-Ordner
 
Lol
Folgendes...
Es ist ganz abstrakt jetzt ^^
ich hab ma temporär mit PEBundle (werde es hinterher noch coden) die exe mit der dll und einer xm (die musikdatei)
gepackt und folgendes passiert :
die exe entpackt die dll in den systemordner (komischerweise - ich hab PEBundle nämlich gesagt es soll nachm exe Ordner extrahieren) und die xm in den exe-Ordner.Und das funktioniert sogar!
Das dumme ist jetzt , dass die xm im Systemordner untergebracht nicht funktioniert.
Aber wenn ich mich nicht irre , kann ich mit den codes , die ich dank eucht :dp: gesammelt hab , das jetzt so umschreiben , dass die xm auch aus dem Systemordner geladen wird :)

Greetz,D

Wormid 11. Nov 2003 16:31

Re: dll in Systemordner suchen anstatt im Exe-Ordner
 
Liste der Anhänge anzeigen (Anzahl: 1)
Och menno... jetzt habe ich dir aus Mitleid :mrgreen: mal eben eine kleine Demo zusammengebastelt, wie das ganze auch ohne dein Extra-Programm funktioniert...

Damit das Archiv möglichst klein ist, musst du das RC-Script und das Projekt selber kompilieren.

Code:
brcc32 bassmod.rc
dcc32 project2.dpr
Damit wird eine kleine Konsolenanwendung erzeugt, in die ein Track und die DLL eingebunden ist... beim Start wird beides ins Temp extrahiert, die DLL geladen und initialisiert, der Track geladen und abgespielt, bis jemand Enter drückt. Danach wird die DLL un-geloaded und sowohl DLL als auch Track werden aus dem Temp wieder gelöscht!

Ich denke, das ist doch genau, das was du willst, oder etwa nicht?


Gruß

Wormid

Edit: Attachment vergessen... :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz