![]() |
String aus DLL verschicken
Hallo DP'ler,
ich habe schon einmal versucht mein Problem zu schildern ( ![]() Vieleicht ist mein Weg dort auch der Falsche. k.A. Deswegen möchte ich mein Anliegen etwas allgemeiner erklären. :stupid: Mal angenommen wir würden ein ganz einfaches Testprogramm schreiben, bestehen aus einer EXE und einer DLL. Die EXE enthält eine TForm, nennen wir sie FormEXE. Darauf befinden sich ein TButton und ein TEdit. Unsere DLL besteht ebenfalls aus einer TForm (FormDLL), einem TButton und einem TEdit. Funktionieren soll das ganze so: Beim Klick auf den Button in der FormEXE soll die DLL geladen, und die FormDLL angezeigt werden. Jetzt schreiben wir in das Edit der FormDLL etwas hinein und klicken anschließend auf den Button der FormDLL. Nun soll der Inhalt (der String) aus FormDll.Edit an die FormEXE gesendet und dort im Edit geschrieben werden. Das ganze soll mit einer Message funktionieren, da die EXE darauf regieren und evtl. mit dem String noch etwas anstellen soll ( AnsiUpperCase z.B.). Ich möchte quasi in der DLL etwas tun, und wenn ich fertig bin, klicke ich auf einen Button (in der DLL), sende der EXE eine Nachricht und die EXE erledigt denn Rest (was auch immer). Wie stelle ich das an? :gruebel: Wichtig dabei ist, das die EXE nach dem Empfang der Nachricht keine Funktion aus der DLL rufen darf. Später sollen nämlich in dem String alle relevanten Informationen stehen, die die EXE zum weiter arbeiten benötigt. Und ich möchte, wenn möglich, auf Speichermanager wie ShareMem oder FastMem verzichten. Alle meine Versuche endeten mit Schutzverletzungen und Exceptions. :wall: Bitte helft mir weiter. Über ein Beispiel würde ich mich tierisch freuen. :bounce2: Danke gmc |
Re: String aus DLL verschicken
Nimm doch
![]() |
Re: String aus DLL verschicken
Mir ist unklar warum du mit messages arbeiten willst wenn die DLL von der Exe selbst geladen wird. Dadurch sind die Daten ja schon in einem gemeinsam genutzten Speicherbereich so das du direkt auf die Daten zugreifen kannst.
|
Re: String aus DLL verschicken
Zitat:
z.B. versch.Kunden => versch.Funktionen. |
Re: String aus DLL verschicken
Mit WM_COPYDATA hab ich schon rumprobiert, wie schon in
![]() Pipes funktionieren, wenn ich das richtig gelesen habe, über Sockets. Das möchte ich eigendlich nicht, weil ich nicht sicher sein kann, ob nicht später auf einem Rechner eine Firewall dazwischen steht. MemoryMappedFiles ... hmmm :gruebel: ... schau ich mir mal an. Eine Message deswegen, weil ich die Exe, von der DLL aus, dazu anregen möchte, etwas zu tun. Ich wüßte sonst nicht wie, wenn nicht mit einer Message. Schließlich kann ich doch von der DLL aus keine Funktionen der Exe rufen. Oder doch? Wenn ja, wie? Zitat:
Austausch bar soll die DLL zwar nicht unbedingt sein, aber es sollen mehrere DLL's auf eine gleiche Art und Weise mit der Hostanwendung arbeiten. |
Re: String aus DLL verschicken
Zitat:
Das ist Kommunikation innerhalb des PCs. Die Firewall bekommt nur Verbindungen, die über die Netzwerkkarte gehen mit. Zitat:
|
Re: String aus DLL verschicken
Zitat:
|
Re: String aus DLL verschicken
Cool, das funktioniert! :bounce2:
DANKE! :thumb: Hätte ich auch selbst drauf kommen können/müssen! :oops: Das eröffnet einem ja vollkommen neue Möglichkeiten :coder: |
AW: String aus DLL verschicken
du kannst z.B. eine Funktion der DLL aufrufen und dieser einen Pointer auf eine Funktion in der EXE mitgeben, diesen Pointer speicherst du und rufst darüber dann die Funktion in der EXE auf
Schön wenn einer mal ein Beispiel posten würde. Anscheinend sind hier nur Specialisten und Hobbyprogramierer verstehen immer nur ein Teil. Und wenn mal ein Beispiel dabei ist funktioniert es nicht weil man immer noch eine andere Komponente haben muss oder es variabelen gibt die im Beispiel nicht zu finden sind. |
AW: String aus DLL verschicken
Im Prinzip genauso, wie mit den bekannten Event-Methoden der VCL. (Button.OnClick usw.)
Delphi-Quellcode:
// EXE
type TMyProc: procedure({s: string}); // was Selbstdeklariertes oder was Fertiges, z.B. ala TNotifyEvent, TThreadMethod oder TThreadProcedure function SetEvent(Value: TMyProc); external MyDLL; procedure MakeIt(...); // alternativ kann man auch den Event-Zeiger hier direkt übergeben external MyDLL;
Delphi-Quellcode:
Was für einen Zeiger man nimmt, dass kann man sich gern aussuchen.
// DLL
type TMyProc: procedure({s: string}); var Event: TMyProc; // es muß keine globale Variable sein function SetEvent(Value: TMyProc); begin Event := Value; end; procedure MakeIt(...); // oder sonstwo ... z.B. aus einem Thread begin ... if Assigned(Event) then Event({s}); ... end;
Delphi-Quellcode:
type
TMyProc: procedure({s: string}); // nur Prozeduren und statische Klassenmethoden TMyProc: procedure({s: string}) of object; // nur Objektmethoden und Klassenmethoden TMyProc: reference to procedure({s: string}); // alles |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 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