Announcement

Collapse
No announcement yet.

Pruefen ob eine Dll geladen ist...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Pruefen ob eine Dll geladen ist...

    Hallo leute...

    OpenLibrary := Laed eine Dll in den Speicher..
    FreeLibrary := Gibt eine Dll wieder Frei...

    Gibt es eine moeglich zu ueberpruefen ob eine Dll schon geladen ist... Moechte nicht unnoetig Openlibrary aufrufen... (das mit dem Refrenzzaehler find ich etwas umstaendlich)

    Vielleicht gibts was wie FindLibrary oder so...

    Gruss und schonmal Danke

    Najib Amaioua

  • #2
    Du willst also eine DLL, welche von anderem Source in Deinem Programm geladen wurde, verwenden. Und was ist, wenn diese andere Stelle die DLL nicht mehr braucht, und sie freigibt? Dann wäre der Zähler doch praktisch gewesen...<p>
    Schöne Grüße, Mario Noac
    Schöne Grüße, Mario

    Comment


    • #3
      Gibt es: <b>GetModuleHandle</b>

      Aber wie schon Mario anmerkt solltest Du dich nicht darauf verlassen das das Handle immer gültig ist

      Comment


      • #4
        Davon abgesehen frage ich dich was an LoadLibarary(), FreeLibrary() so viel komplizierter als an GetModuleHandle() ist. Wichtig ist doch nur das die DLL auch wirklich im Speicher ist. Sollte sie schon geladen sein, -> GetModuleHandle() gibt dann gültiges Handle zurück, wird beim LoadLibrary() <b>NUR</b> der interne Referenzzähler um 1 erhöht. Darum brauchst du dich ja nicht kümmern.<br>

        <i>Einzigster</i> sinnvoller Nutzen von GetModuleHandle() in diesem Szenario wäre wenn du dich auf Kernel32.dll beziehen würdest. Da jeder Prozess diese System DLL beim Starten geladen bekommt (ob er will oder nicht) braucht man hier nich mit LoadLibrary() zu arbeiten.<br> Allerdings empfehle ich's trotzdem.

        Gruß Hage

        Comment


        • #5
          Hallo,

          die Empfehlung von Hagen kann ich nur voll unterstreichen. Der direkte Weg über GetModuleHandle ist "gefährlich" - dies musste auch Borland beim Wechsel vom MTS zu COM+ lernen. Wenn eine neue Windows-Version bestimmte DLLs "umbiegt", wird die "Übersetzungs-Tabelle alter/neuer Dateiname" von Microsoft nur in der Win32-API-Funktion LoadLibrary mitgeführt. Wenn eine "alte" Anwendung nun über LoadLibrary eine "alte" DLL anfordert, liefert das neue Betriebssystem die inzwischen unter einem anderen Dateinamen vorhandene "neue" DLL zurück. Im Fall von GetModuleHandle ist das nicht der Fall (aus diesem Grund hat Delphi 5 Enterprise im MTS-Teil unter Windows 2000 auch nicht mehr funktioniert)

          Comment

          Working...
          X