Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi DLL finden und Version ermitteln (https://www.delphipraxis.net/2780-dll-finden-und-version-ermitteln.html)

ChrisF 6. Feb 2003 15:06


DLL finden und Version ermitteln
 
Hmm, Überschrift erläutere ich gleich näher...

Tach zusammen.

Habe heute mal folgendes Prob:
Da mein Prog auf bestimmte Dateiversionen von dlls angewiesen ist, möchte ich im About-Fenster die Versionen dieser Dateien anzeigen.
Jetzt will ich das jedoch so gestalten, dass es mich nicht kümmern muss, wo diese Dateien abgelegt sind. (Soll ja Leute geben, die Windows nicht auf C: haben).
Die Datei msado15.dll zum Beispiel (die auch den meisten Ärger macht) habe ich schon in verschiedenen Verzeichnissen gefunden.

Was nun? kann mich also weder drauf verlassen, dass sie unterhalb c:\programme liegt noch dass sie überhaupt auf C: liegt.

Danke im Voraus

Chris

OregonGhost 6. Feb 2003 16:51

Das müsste mit GetModuleFileName gehen.
Als Modulhandle nimmst du den Handle, den LoadLibrary zurückliefert (oder GetModuleHandle, wenn die DLL anderweitig geladen wird).

So viele Pfade kann es aber eigentlich für die DLL nicht geben. Eine DLL sollte in folgendem Suchpfad liegen, denn so sucht LoadLibrary:
  1. The directory from which the application loaded.
  2. The current directory.
  3. The system directory. Use the GetSystemDirectory function to get the path of this directory.
    Windows NT/2000/XP: The name of this directory is System32.
  4. Windows NT/2000/XP: The 16-bit system directory. There is no function that obtains the path of this directory, but it is searched. The name of this directory is System.
  5. The Windows directory. Use the GetWindowsDirectory function to get the path of this directory.
  6. The directories that are listed in the PATH environment variable.
Solltest du die DLL im Verzeichnis einer anderen Anwendung finden, dann ist es wahrscheinlich keine System-DLL und du musst sie mit deiner Anwendung mitliefern.

Christian Seehase 6. Feb 2003 17:11

Moin Chris,

wenn die DLL redistributable ist, und das Programm nur unter W2K/XP laufen soll, gäbe es da noch einen "Trick":

Lege in dem Verzeichnis, in dem die EXE liegt, die die DLL laden soll noch eine Datei "NameDerExe.exe.local" an.
Das kann auch eine leere Datei sein.
Ausserdem muss in diesem Verzeichnis noch die DLL liegen.

Dann wird auf jeden Fall die DLL aus dem Verzeichnis geladen, in dem die EXE steht, egal, wo sich diese ansonsten noch befindet

ChrisF 7. Feb 2003 07:06

Hallo ihr beiden,

danke für die Antworten, denke das hilft mir schon weiter.
Die dll liegt übrigens (zumindest auf den meisten Systemen, auf denen ich nachgesehen habe) unterhalb C:\Programme\Gemeinsame...
Sollte aber durch PATH gefunden werden.

Danke auf jeden Fall, hoffe dass ich mich mal revanchieren kann.

Ach ja, guten Morgen.
Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:23 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