Einzelnen Beitrag anzeigen

Olli
(Gast)

n/a Beiträge
 
#4

Re: DLL mehrmals laden / mehrere Instanzen bei einem Prozess

  Alt 28. Mai 2006, 11:58
Zitat von Thomas233:
Nunja, mein Ziel war es eigentlich die Verwaltung mehrer Zustände/Daten (ich sag einfach mal so dazu) von der Dll fern zu halten da ich das ganze nicht zu kompliziert machen möchte, vor allem deshalb weil später vielleicht auch einmal andere Personen solche Dlls selbst schreiben können sollen.
Alo da gäbe es erstmal verschiedene Herangehensweisen:
1.) die DLL exportiert für jeden Zustand eine Funktion
2.) Stackvariablen werden ja nicht in der DLL sondern im Prozeß verwaltet, also kann man sehr wohl eine Funktion mehrfach "instanziieren". Nichts anderes tust du mit jedem Aufruf einer Funktion in einer DLL. Nur weil CreateFile() in einer DLL realisiert wurde, muß die DLL nicht die vielen vielen Aufrufe verwalten oder gar koordinieren.

Zitat von Thomas233:
In der Dll befinden sich nähmlich meistens Fenster/Formulare die nun ohne mehrmaliges laden der Dll auch manuell mehrmals erstellt werden müssten (ich meine jetzt in der Dll durch den Author selbst).
Durch "TFormX.Create()", jupp. und wo ist das Problem? Wenn du bis jetzt deine Formulare bereits in DllMain (zwischen "begin end.") erstellst, machst du was ganz großartig falsch. Wer sagt denn beispielsweise, daß das Plugin nachher wirklich angezeigt wird? Niemand! Aber du erzeugst es womöglich bei jedem Laden der DLL - sinnloserweise.

Zitat von Thomas233:
Ausserdem müsste man bei jedem Funktionsaufruf in der Dll unterscheiden können welches Formular/Fenster angezeigt werden soll bzw. welches gerade aktiv ist oder ob eben ein neues erstellt werden soll.
Ähem ja. Da die DLL sicherlich eine Funktion exportiert, sollte es ja wohl kein Problem sein ihr einen Parameter mitzugeben der der DLL mitteilt welches Formular gewünscht wird?!

Zitat von Thomas233:
In Delphi wäre das ja z.b. anhand von Arrays oder Listen kein grosses Problem, aber z.b. in C stelle ich mir das nicht so einfach vor.
Listen? Arrays? Wozu denn?

Zitat von Thomas233:
Dadurch das nun ausserdem verschiedene Dlls verwendet werden müsste ich im Hauptprogramm selbst irgendwie einen Zähler integrieren der herausfindet welches Fenster der aktuellen Dll gerade angezeigt werden soll und die entsprechende Id dann an die Dll übergibt.
Richtig, man assoziiert ein eigenes "Handle" (das man der DLL ebenfalls übergibt) mit einem Objekt. So kann man intern immer von einem aufs andere abbilden.

Zitat von Thomas233:
Beispiel:
Modul 1)irgendwas.dll -> Fenster 1 (=Fenster-Id 1)
Modul 2)irgendwasanderes.dll -> Fenster 1 (=Fenster-Id 1)
Modul 3)irgendwas.dll -> Fenster 2 (=Fenster-Id 2)

Das würde bedeuten das eine Instanz von irgendwas.dll zwei Fenster verwalten müsste. Im Hauptprogramm selbst musste ich nun z.b. bei Modul 3) eine Funktion in irgendwas.dll aufrufen und gleichzeitig die Fenster-Id "2" mitgeben damit die Dll weiss das mit dem zweiten Fenster gearbeitet wird.
Ja und?

Zitat von Thomas233:
Falls jemand eine Idee hat wie man das einfacher lösen könnte (das war halt jetzt einmal meine Idee) dann würde ich mich über eine entsprechende Antwort sehr erfreut.
Siehe oben.
  Mit Zitat antworten Zitat