Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mehrfaches einbinden von DLL verhindern. (https://www.delphipraxis.net/118698-mehrfaches-einbinden-von-dll-verhindern.html)

Viktorii 18. Aug 2008 15:23

Re: Mehrfaches einbinden von DLL verhindern.
 
Zitat:

Zitat von OldGrumpy
Dazu böte es sich an, einfach das USB-Device (ich vermute mal es wird eh per CreateFile geöffnet?) einfach exklusiv zu öffnen und fertig.

Leider nicht. Die Geräte werden über eine weitere DLL angesprochen ...


Zitat:

Zitat von brechi
warum denn nicht:

Delphi-Quellcode:
  mHandle := CreateMutex(nil, True, 'bineinetolleDLL');

  if GetLastError = ERROR_ALREADY_EXISTS then
  begin
    CreateMessageDialog('Application already running!', mtWarning, [mbOk]).ShowModal;
    Halt;
  end;
Der Referenzzähler einer DLL ist lokal für jedes Programm.

Gibt so viele Möglicheiten, warum denn nen Mutex nehmen?

Das funktioniert in sofern, dass das doppelte Öffnen Erkannt wird und die Medlung angezeigt wird. Allerdings wird die Anwendung nicht geschlossen, sondern läuft parallel zu der ersten weiter. Wie kann ich es in der DLL bewerkstelligen, dass die Anwendung beendet wird?

Deep-Sea 18. Aug 2008 15:55

Re: Mehrfaches einbinden von DLL verhindern.
 
Zitat:

Zitat von Viktorii
Zitat:

Zitat von brechi
Delphi-Quellcode:
  mHandle := CreateMutex(nil, True, 'bineinetolleDLL');

  if GetLastError = ERROR_ALREADY_EXISTS then
  begin
    CreateMessageDialog('Application already running!', mtWarning, [mbOk]).ShowModal;
    Halt;
  end;

Das funktioniert in sofern, dass das doppelte Öffnen Erkannt wird und die Medlung angezeigt wird. Allerdings wird die Anwendung nicht geschlossen, sondern läuft parallel zu der ersten weiter.

Ich glaube dieser Code soll in die Applikation, nicht in die DLL. Sprich: Tritt kein ERROR_ALREADY_EXISTS auf, so darf die Applikation die DLL laden. Beim freigeben der DLL muss sie natürlich auch wieder den Mutex freigeben. Tritt der Fehler jedoch auf, so verfährst du wie es im Code oben steht, bzw. wie du es auch bei deiner "MultipleAppicationNotifyer"-Unit tust.

(Seh ich doch richtig, oder?) ...


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

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