Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Temp-Ordner als Konstante vor Programmstart? (https://www.delphipraxis.net/147023-temp-ordner-als-konstante-vor-programmstart.html)

stho 31. Jan 2010 14:08


Temp-Ordner als Konstante vor Programmstart?
 
Hallo leute
ich habe da ein kleines Problem

ich benutze in meinem Programm eine DLL die vorhanden sein muss wenn das Programm startet. Also kann ich sie auch nicht als resource hinzu fügen und dann zur laufzeit erzeugen.
Eine lösung für das droppen habe ich schon gefunden. Ein anderes Tool schmeißt die benötigte dll in das TEMP-verzeichniss

Nun könnt ihr euch vielleicht schon denken wo das problem liegt...
Ich möchte das Verzeichniss des TEMP-Ordners als Konstante hinterlegen da er sonst die DLL nicht findet...

mit "DLL_FILE = '%temp%\sqlite3.dll'" geht das leider nicht :-(

Wie kann ich das realisieren?

Matze 31. Jan 2010 14:10

Re: Temp-Ordner als Konstante vor Programmstart?
 
Hallo,

das geht mit GetSpecialFolderGetSpecialFolder. Ich habe nur im Hinterkopf, dass man das nicht mehr verwenden sollte. Sicher bin ich mir aber nicht.

stho 31. Jan 2010 14:14

Re: Temp-Ordner als Konstante vor Programmstart?
 
nun, danke schonmal für die schnelle hilfe :-)
doch leider ist dieser aufruf schon zu spät...

ich brauche eine fest hinterlegte konstante (wenn es so eine gibt) mit der man das TEMP-Verzeichniss ansprechen kann
vielleicht gibt es da ja sowas...

mkinzler 31. Jan 2010 14:17

Re: Temp-Ordner als Konstante vor Programmstart?
 
Warum zu spät?

Bernhard Geyer 31. Jan 2010 14:22

Re: Temp-Ordner als Konstante vor Programmstart?
 
Zitat:

Zitat von stho
mit "DLL_FILE = '%temp%\sqlite3.dll'" geht das leider nicht :-(

Ist ja auch klar. "temp" ist nur eine Umgebungsvariable die der Windows Explorer bei Eingabe von %temp% automatisch auflöst. In deinem Programm müsstest du das selbst machen.

Falls du sqlite3.dll statisch gebunden hast: Wieso lieferst du diese DLL nicht in deinem Anwendungverzeichnis mit? Oder baust deinen Zugriff nicht auf dynamische Bindung (oder bei D2010 auf delay loading) um?

Luckie 31. Jan 2010 14:24

Re: Temp-Ordner als Konstante vor Programmstart?
 
Weil die DLL statisch gelinkt wird. Link die DLL dynamisch und füge sie als Ressource hinzu. Dann brauchst du auch nicht diesen komischen Dropper, der eventuell sogar als Virus erkannt wird.

stho 31. Jan 2010 14:46

Re: Temp-Ordner als Konstante vor Programmstart?
 
die Konstante wird hier geladen:
Delphi-Quellcode:
const
{$IF Defined(MSWINDOWS)}
  SQLiteDLL = 'sqlite3.dll';
[...]
und hier ist wird die konstante verwendet:
[delphi]
function SQLite3_Open(filename: PAnsiChar; var db: TSQLiteDB): integer; cdecl; external SQLiteDLL name 'sqlite3_open';
function SQLite3_Close(db: TSQLiteDB): integer; cdecl; external SQLiteDLL name 'sqlite3_close';
function SQLite3_Exec(db: TSQLiteDB; SQLStatement: PAnsiChar; CallbackPtr: TSQLiteExecCallback; UserData: Pointer; var ErrMsg: PAnsiChar): integer; cdecl; external SQLiteDLL name 'sqlite3_exec';
[delphi]

nun, wie linke ich denn dynamisch? ja, als resource hinzu fügen kann ich, währe natürlich auch schön :-(
aber leider habe ich keine ahnung wie ich "dynamisch linke"

Luckie 31. Jan 2010 14:49

Re: Temp-Ordner als Konstante vor Programmstart?
 
Zitat:

Zitat von stho
die Konstante wird hier geladen:
Delphi-Quellcode:
const
{$IF Defined(MSWINDOWS)}
  SQLiteDLL = 'sqlite3.dll';
[...]

Da wird nichts geladen. da wird nur eine Konstante definiert/zugewiesen. Stecht doch auch drüber: const.

Zitat:

nun, wie linke ich denn dynamisch? ja, als resource hinzu fügen kann ich, währe natürlich auch schön :-(
aber leider habe ich keine ahnung wie ich "dynamisch linke"
Sollte in jedem DLL Tutorial stehen. Und wenn nicht findet sich dazu bestimmt was im Forum: Delphi-Referenz durchsuchendll dynamisch laden.

stho 31. Jan 2010 15:36

Re: Temp-Ordner als Konstante vor Programmstart?
 
gut, habe mir das mit dem dynamischen laden angeschaut...
einziges problem ist nur, das dort UNZÄHLIGE funktionen aufgerufen werden, die ich doch nicht alle so laden kann :wall:
es ist leider ziemlich verzwickt...

gibt es wirklich keine andere alternative??? :cry:

mkinzler 31. Jan 2010 15:37

Re: Temp-Ordner als Konstante vor Programmstart?
 
Nimm doch einen vorhandenen SQLite-Wrapper

stho 31. Jan 2010 15:49

Re: Temp-Ordner als Konstante vor Programmstart?
 
Zitat:

Zitat von mkinzler
Nimm doch einen vorhandenen SQLite-Wrapper

was ist das denn? o.O
was soll das denn sein? ich google jetzt schon nen bisschen aber eine schlüssige erklärung hab ich noch nicht entdeckt

mkinzler 31. Jan 2010 15:51

Re: Temp-Ordner als Konstante vor Programmstart?
 
Ein Wrapper macht genau, das was du benötigst. Er macht Funktionen einer Dll als Prozeduren/Funktionen in Delphi nutzbar

stho 31. Jan 2010 15:53

Re: Temp-Ordner als Konstante vor Programmstart?
 
Zitat:

Zitat von mkinzler
Ein Wrapper macht genau, das was du benötigst. Er macht Funktionen einer Dll als Prozeduren/Funktionen in Delphi nutzbar


ahhhhh ^^ okay, dann gucke ich mal ob ich eine möglichkeit finde dieses ding zu benutzen... :pale:


EDIT:
-----------
Ich hab so das gefühl diese Wrapper liefern ja auch eine DLL mit die geladen werden wird -.-
also bin ich wieder ganz am anfang angekommen...

jaenicke 31. Jan 2010 16:11

Re: Temp-Ordner als Konstante vor Programmstart?
 
Zitat:

Zitat von stho
Ich hab so das gefühl diese Wrapper liefern ja auch eine DLL mit die geladen werden wird -.-
also bin ich wieder ganz am anfang angekommen...

Die Wrapper laden die Funktionen aber vermutlich nicht alle statisch. Das heißt du musst einmal schauen, wie die Wrapper die DLL denn einbinden.

Und ansonsten bleiben dir halt nur zwei Wege:
Entweder der ganz normale, d.h. die DLL im Programmverzeichnis mitliefern wie es so gut wie alle Programme machen.
Oder eben auch das Programm ins Tempverzeichnis entpacken. Das wäre eine Notlösung, nicht schön und nicht gut, aber funktioniert...


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 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-2025 by Thomas Breitkreuz