AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Kommunikation zwischen (injected) DLL und Programm
Thema durchsuchen
Ansicht
Themen-Optionen

Kommunikation zwischen (injected) DLL und Programm

Ein Thema von DarkPressure · begonnen am 23. Apr 2006 · letzter Beitrag vom 29. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
DarkPressure

Registriert seit: 24. Mär 2006
28 Beiträge
 
Delphi 2006 Architect
 
#1

Kommunikation zwischen (injected) DLL und Programm

  Alt 23. Apr 2006, 11:30
Hallo erstmal ^^
Also folgende Situation:
Ich habe eine DLL in einen Prozess geladen, diese soll aber jetzt meinem Hauptprogramm "Bericht erstatten".
Das ganze über Registry zu realisieren ist zu umständlich, gibt es keine andere Methode?
Achja nach Möglichkeit müsst ich auch der DLL Anweisungen geben können.

Gruß DarkPressure
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Kommunikation zwischen (injected) DLL und Programm

  Alt 23. Apr 2006, 11:37
Möglichkeiten wären über Sockets (evtl. Stören aber Firewalls) oder Windows-Messages.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
DarkPressure

Registriert seit: 24. Mär 2006
28 Beiträge
 
Delphi 2006 Architect
 
#3

Re: Kommunikation zwischen (injected) DLL und Programm

  Alt 23. Apr 2006, 11:45
Zitat von Bernhard Geyer:
Windows-Messages
Erstmal danke für die schnller Antwort, da ich mir eingestehen muss ein totaler Delphi noob zu sein, würd ich gern wissen was es mit diesen Windows-Messages auf sich hat und wie man die einsetzt.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Kommunikation zwischen (injected) DLL und Programm

  Alt 23. Apr 2006, 11:53
Schau dir mal die Threads zu Hier im Forum suchenWM_COPYDATA an.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
DarkPressure

Registriert seit: 24. Mär 2006
28 Beiträge
 
Delphi 2006 Architect
 
#5

Re: Kommunikation zwischen (injected) DLL und Programm

  Alt 23. Apr 2006, 12:23
So weit, so gut
Trotzdem gibts ein weiteres Problem, in meiner DLL sagt er mir Handle ist ein undeclared identifier, obwohl ich Controls als Unit hinzugefügt hab.
Delphi-Quellcode:
  ...
  hTargetWnd := FindWindowEx(0, 0, nil, PChar('Fenster'));
  if hTargetWnd <> 0 then
    SendMessage(hTargetWnd, WM_COPYDATA, Longint(Handle), Longint(@aCopyData))
  else
    ShowMessage('No Recipient found!')
  ...
EDIT: Mittlerweile weiß ich, dass dieses Hanlde sich nur auf die Controls eienr Form bezieht..
Aber wie löst man das in der DLL?
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#6

Re: Kommunikation zwischen (injected) DLL und Programm

  Alt 23. Apr 2006, 12:38
Hier im Forum suchenNamed Pipes wären auch eine Möglichkeit - da gibts auch Komponenten dazu

  Mit Zitat antworten Zitat
DarkPressure

Registriert seit: 24. Mär 2006
28 Beiträge
 
Delphi 2006 Architect
 
#7

Re: Kommunikation zwischen (injected) DLL und Programm

  Alt 23. Apr 2006, 15:10
Ich krieg die Krise mit den Pipes
Im Client steht jetzt
Delphi-Quellcode:
procedure TForm1.NPipeServer1IncomingData(Sender: TObject; Data: TMemoryStream;
  var Reply: TMemoryStream);
begin
  Memo1.Lines.LoadfromStream(Data);
end;
Und wirds in der DLL initialisiert: (Beispiel)
Delphi-Quellcode:
   begin
   PipeClient := TNPipeClient.Create(Nil);
   PipeClient.PipeName := 'MyPipe';
   PipeClient.SendTimeout := 500;
   WMSend('Recv', 999);
   end;
Delphi-Quellcode:
procedure WMSend(Action: string; Socket: Integer); stdcall;
var
  MS : TMemoryStream;
  Senddata: string;
begin
  MS:=TMemoryStream.Create;
  Senddata := Action + IntToSTR(Socket);
  MS.WriteBuffer(Pointer(Senddata)^, Length(Senddata));
  PipeClient.SendBuffer(MS);
  MS.Free;
end;
Ich bin wirklich am verzweifeln
  Mit Zitat antworten Zitat
DarkPressure

Registriert seit: 24. Mär 2006
28 Beiträge
 
Delphi 2006 Architect
 
#8

Re: Kommunikation zwischen (injected) DLL und Programm

  Alt 23. Apr 2006, 21:09
Sory für doppel Antwort, abe rich möchte sagen, dass ich auf Pipe lieber verzichte.
Ich würde gern die Windows Message Methode nutzen,
Delphi-Quellcode:
...
  hTargetWnd := FindWindowEx(0, 0, nil, PChar('Fenster'));
  if hTargetWnd <> 0 then
    SendMessage(hTargetWnd, WM_COPYDATA, Longint(Handle), Longint(@aCopyData))
  else
    ShowMessage('No Recipient found!')
  ...
Kann mir da jemand sagen wie ich da smit dem Handl löse in einer DLL
Hoffe jemand kann mir weiter helfen
  Mit Zitat antworten Zitat
guste

Registriert seit: 23. Apr 2006
19 Beiträge
 
#9

Re: Kommunikation zwischen (injected) DLL und Programm

  Alt 23. Apr 2006, 21:31
Hallo,

also Dein Hauptprogramm könnte eine Broadcast Message senden, auf die Deine Dll mit dem Handle der eigenen Fensterprozedur antwortet.
Von diesem Zeitpunkt kennt das Hauptprogramm und die Dll die entsprechenden Handles.

Für Broadcast Message:

DBT_INIT: cardinal;
DBT_INIT := RegisterWindowMessage(MSG_DBT_INIT);
PostMessage(HWND_BROADCAST,DBT_INIT,self.handle,0) ;

Für Fensterprozedur Dll

procedure WndProc(var Message: TMessage);
begin
if Message.Msg = DBT_INIT then
begin
PostMessage(Message.LParam,DBT_INIT,dllWndHdl,0); // das ist trocken getippt, könnte auch WParam sein
end
end

dllWndHdl := AllocateHWnd(WndProc);

Gruesse,
Guido
  Mit Zitat antworten Zitat
Benutzerbild von c113plpbr
c113plpbr

Registriert seit: 18. Nov 2003
Ort: localhost
674 Beiträge
 
Delphi 2005 Professional
 
#10

Re: Kommunikation zwischen (injected) DLL und Programm

  Alt 24. Apr 2006, 21:20
Mit was injezierst du denn die DLL?
Wenn du es mit madCodeHook machst, werden dir die IPC-Funktionen gleich mitgeliefert, wenn du's nicht mit madCodeHook machst, kann ich dir nur dazu raten .
Wie auch immer, effektive Methoden können WindowMessages sein, Pipes, shared memory, oder geschicktes Arbeiten mit Mutexes/Semaphoren/Critical Sections und ReadProcessMemory bzw. WriteProcessMemory, kommt eben immer auf den Anwendungszweck/bereich an.

ciao,
Philipp
Philipp
There is never enough time to do all the nothing you want.
*HABENWILL*
  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 10:40 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