AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String aus DLL verschicken

Ein Thema von gmc616 · begonnen am 12. Mai 2006 · letzter Beitrag vom 7. Jul 2020
Antwort Antwort
Seite 1 von 2  1 2      
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#1

String aus DLL verschicken

  Alt 12. Mai 2006, 13:09
Hallo DP'ler,

ich habe schon einmal versucht mein Problem zu schildern (daten uebertragen von dll nach exe), hab aber leider keine erfolgsversprechende Antwort bekommen.
Vieleicht ist mein Weg dort auch der Falsche. k.A.
Deswegen möchte ich mein Anliegen etwas allgemeiner erklären.

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?

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.

Bitte helft mir weiter.
Über ein Beispiel würde ich mich tierisch freuen.

Danke
gmc
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: String aus DLL verschicken

  Alt 12. Mai 2006, 13:12
Nimm doch Hier im Forum suchenWM_COPYDATA oder Pipes oder MemoryMappedFiles.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: String aus DLL verschicken

  Alt 12. Mai 2006, 13:19
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: String aus DLL verschicken

  Alt 12. Mai 2006, 13:46
Zitat von SirThornberry:
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.
vermutlich soll die DLL austauschbar sein.
z.B. versch.Kunden => versch.Funktionen.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: String aus DLL verschicken

  Alt 12. Mai 2006, 13:49
Mit WM_COPYDATA hab ich schon rumprobiert, wie schon in HIER beschrieben. Irgendwie habe da einen Fehler drin, weiß aber nicht wo und welchen.

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 ... 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 von SirThornberry:
... 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.
hmm ... und wie mache ich das?

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.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: String aus DLL verschicken

  Alt 12. Mai 2006, 13:57
Zitat von gmc616:
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.
Papperlapap.
Das ist Kommunikation innerhalb des PCs. Die Firewall bekommt nur Verbindungen, die über die Netzwerkkarte gehen mit.

Zitat von gmc616:
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?
sicher kannst du das.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#7

Re: String aus DLL verschicken

  Alt 12. Mai 2006, 14:29
Zitat von RavenIV:
Zitat von gmc616:
Schließlich kann ich doch von der DLL aus keine Funktionen der Exe rufen. Oder doch? Wenn ja, wie?
sicher kannst du das.
genau ... 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 ^^
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: String aus DLL verschicken

  Alt 12. Mai 2006, 15:28
Cool, das funktioniert!

DANKE!

Hätte ich auch selbst drauf kommen können/müssen!

Das eröffnet einem ja vollkommen neue Möglichkeiten
  Mit Zitat antworten Zitat
js747a

Registriert seit: 11. Aug 2008
Ort: Nord hessen
43 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: String aus DLL verschicken

  Alt 7. Jul 2020, 14:25
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#10

AW: String aus DLL verschicken

  Alt 7. Jul 2020, 14:49
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:
// 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;
Was für einen Zeiger man nimmt, dass kann man sich gern aussuchen.
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Jul 2020 um 14:54 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz