![]() |
Mehrfaches einbinden von DLL verhindern.
Moin,
ich habe eine DLL geschrieben, die von mehreren von mir geschriebenen Programmen benutzt werden kann. Nun möchte ich, dass nicht mehr als ein Programm gleichzeitig diese DLL nutzen kann, da die in der DLL enthaltenen Funktionen nicht parallel ausgeführt werden dürfen. Ich möchte also dass wenn ein zweites Programm geöffnet wird, welches die DLL benutzt, ein Meldung erscheint und das Programm anschließend geschlossen wird. Wie kann ich das realisieren? Vielen Dank |
Re: Mehrfaches einbinden von DLL verhindern.
Das Laden der Dll erfolgt durch Windows. Du müsstest die Sperrverwaltung also manuell implementieren
|
Re: Mehrfaches einbinden von DLL verhindern.
Warum dürfen die Funktionen nicht parallel ausgeführt werden? Jedes Programm, welches die DLL läd bekommt eine eigene Kopie der Daten - auch der globalen Varaiablen, da sollte nichts passieren.
|
Re: Mehrfaches einbinden von DLL verhindern.
Zitat:
Delphi-Quellcode:
Funktioniert super. Aber wie mache ich das bei ner DLL?
unit MultipleAppicationNotifyer;
interface implementation uses Windows, Dialogs, SysUtils, Forms; var mHandle : THandle; initialization mHandle := CreateMutex(nil, True, pChar(Application.Title)); if GetLastError = ERROR_ALREADY_EXISTS then begin CreateMessageDialog('Application already running!', mtWarning, [mbOk]).ShowModal; Halt; end; finalization if mHandle <> 0 then CloseHandle(mHandle) end. Zitat:
|
Re: Mehrfaches einbinden von DLL verhindern.
Die DLL könnte versuchen einen IPC oder TCP/IP(auf localhost) server zu erreichen. Wenn der nicht antwortet dann macht sie selbst einen auf, ansonsten sperren sich die Funktionen oder eine Funktion liefert wenn sie abgefragt wird den Sperrstatus und die Anwendungen müssen sich dann daran halten.
|
Re: Mehrfaches einbinden von DLL verhindern.
Wie wäre es mit eine Semaphoredatei? Da spart man sich den TCP/IP Overhead.
Sherlock |
Re: Mehrfaches einbinden von DLL verhindern.
was hast du gegen den mutex?
ist doch wunderbar das ding. du könntest den mutex auch einfach locken wenn deine .dll geladen wird. semaphoren würde ich dann verwenden wenn du die .dlls doch in den anderen programmen verwenden willst, aber synchronisiert eben. wenn du die .dll aber nur einmal haben willst ( was am sinn der .dll vorbei geht ) dann eben mutex. lg Arnulf |
Re: Mehrfaches einbinden von DLL verhindern.
Kommt man nicht irgendwie an den Referenzzähler von Windows für die DLL dran? Wenn der grö0er null ist, darf das Programm die DLL nicht laden. Und damit du eine Kontrolle darüber hast, würde ich sie dynamisch laden (natürlich dann auch in deinen anderen Programmen).
|
Re: Mehrfaches einbinden von DLL verhindern.
warum denn nicht:
Delphi-Quellcode:
Der Referenzzähler einer DLL ist lokal für jedes Programm.
mHandle := CreateMutex(nil, True, 'bineinetolleDLL');
if GetLastError = ERROR_ALREADY_EXISTS then begin CreateMessageDialog('Application already running!', mtWarning, [mbOk]).ShowModal; Halt; end; Gibt so viele Möglicheiten, warum denn nen Mutex nehmen? |
Re: Mehrfaches einbinden von DLL verhindern.
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08: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