Delphi-PRAXiS
Seite 1 von 2  1 2      

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 15: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 15: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 15: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 15:17

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

Bernhard Geyer 31. Jan 2010 15: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 15: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 15: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 15: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 16: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 16:37

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:47 Uhr.
Seite 1 von 2  1 2      

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