Autor Beitrag
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 15.12.08 13:34 
Wenn du LoadLibrary auf eine bereits in dein Programm geladene DLL aufrufst bekommst du einfach das Handle und ein Referenzzähler wird um 1 erhöht (der dann bei FreeLibrary wieder um 1 reduziert wird, damit die DLL entladen wird, wenn du nicht mehr darauf zugreifst). Ich gehe davon aus, dass das auch bei statisch eingebundenen DLLs so funktioniert.

Es gibt natürlich auch direkte Möglichkeiten die geladenen DLLs durchzugehen, aber das dürfte die einfachste Lösung sein.
DerNetteNachbar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: Mo 15.12.08 13:38 
Wie kann ich denn eine DLL identifizieren, z.B. anhand des Namens? Brauche wie ich schon sagte das Handle während der Laufzeit. Mit FindWindow geht es wohl schlecht da ich kein Fenster in der DLL nun mal habe.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 15.12.08 13:55 
Ja, wenn du es mir LoadLibrary nicht machen willst, dann sollte EnumProcessModules das richtige sein.
DerNetteNachbar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: Mo 15.12.08 14:49 
Kannst du vielleicht ein Beispiel posten damit ich einen Blick dafür habe?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 15.12.08 14:56 
Die Dokumentation:
msdn.microsoft.com/e...ms682631(VS.85).aspx
und ein Beispiel, zwar nicht in Delphi, aber es zeigt die Funktionsweise:
msdn.microsoft.com/e...ms682621(VS.85).aspx
DerNetteNachbar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: Mo 15.12.08 16:29 
Geht es vielleicht etwas leichter?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 15.12.08 16:57 
Ich habe LoadLibrary ja bereits vorgeschlagen, ich habe das nicht getestet, gehe aber wie gesagt davon aus, dass das funktioniert. Einfacher geht es nun wirklich nicht. Hast du das denn einmal ausprobiert?
DerNetteNachbar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: Mi 17.12.08 10:56 
Ja danke mit loadlibrary hat es geklappt das Handle der DLL zu kriegen. Nun sende ich mittels SendMessage Textnachrichten von der DLL an das Programm und vom Programm an die DLL. Der erste Weg klappt ganz hervorragend nur der zweite will irgentwie nicht. Ich habe das mit diesem Beispiel von den Schweizern realisiert:
www.swissdelphicente.../showcode.php?id=163
Irgentwas mach ich falsch da ich mit der DLL nicht empfangen kriege.


MfG

Nachbar

Moderiert von user profile iconNarses: Link in URL-Tags gesetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 17.12.08 12:43 
Naja, in der DLL hast du vermutlich kein Fenster? Das kann auch ein leeres sein, um das zu erstellen gibts eine API-Funktion. Aber Nachrichten kann man nur mit Fensterhandles austauschen.

Oder wenn doch wie sieht dort denn der Code aus?

Aber wozu SendMessage? Hat das einen tieferen Sinn?
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 17.12.08 12:47 
Nochmal zum Verständnis: ist das Deine eigene DLL oder eine fremde?
DerNetteNachbar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: Mi 17.12.08 13:12 
Das ist meine eigene DLL und ich habe auch Fenster drin die aufgerufen werden. Mit der oben erwähnten Funktion Receive empfange ich den String von der DLL. Nur leider klappt eben derselbe Mechanismus nicht wenn man zu dem Handle der DLL sendet. Übrigens in der SendMessage hab ich eben den String der gesendet wird, als eigene Message deklariert.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 17.12.08 13:16 
Dann frage ich mich aber, wieso Du die Kommunikation zwischen Anwendung und DLL über Messages abwickelst und nicht über exportierte DLL-Funktionen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 17.12.08 13:17 
Ich habe sowas nie ausprobiert, aber du könntest ja direkt an die einzelnen Fenster schicken. Schließlich hast du die ja auflisten lassen.
Und das ist auch der Titel dieses Threads. Deine Fragen jetzt haben damit ja nicht mehr etwas zu tun, oder? Denn dieses Problem war ja gelöst.

Trotzdem frage ich mich warum du überhaupt SendMessage benutzt, das ist doch unnötig kompliziert. :gruebel:
DerNetteNachbar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: Mi 17.12.08 13:28 
Stimmt, sorry bin etwas vom Thema abgewischen. Theoretisch währe das Problem hiermit gelöst. Danke euch beiden für euere tatkräftige Unterstützung.

MfG

Nachbar