Autor Beitrag
Tensid
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Fr 17.12.04 13:17 
Ich habe das dll-injection

www.delphi-forum.de/...ight=dll%20injection

probiert (an calc.exe und notepad.exe). Mit VCL gab es, wie erwartet, Probleme, daher hab ich das Ganze nonvcl getestet und wollte die Kommunikation mit der DLL per serversocket machen. Als .exe kompilliert hat das Grundgerüst funktioniert, als DLL ist der Port des Servers zwar offen aber er reagiert nicht darauf wenn ich ihm Befehle sende. Die Events wie onclientread werden nie erreicht. Bei anderen Komponenten werden die Events auch nicht erreicht. Wie kann man die Events nutzen?
Hier mein Testcode (wegen Platz und Übersicht ohne procedure senden):

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
type Tr = class(Tserversocket) 
  public 
     procedure lesen(Sender: TObject; Socket: TCustomWinSocket); 
     procedure senden(var sendstring:string); 
     constructor create; 
  end; 

constructor Tr.create; 
begin 
  inherited 
  create(nil); 
  onclientread:=lesen; 
end; 

procedure TR.lesen(Sender: TObject; Socket: TCustomWinSocket); 
var msg,tmp:string; 
begin 
  msg:=Socket.ReceiveText; 
  if msg = 'lalelu' then senden('ok'); 
end; 


var r:tr; 

begin 
r:=tr.create; 
r.Port:=33; 
try r.Open except end; 
... 
... 
end;
EUOCheffe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124



BeitragVerfasst: Do 23.12.04 07:10 
Ich kenn mich damit auch nicht 100%ig aus, aber ich würde mal auf folgendes tippen:

Wenn du die DLL einspritzt und irgendwo verankerst, dann wird zwar dein Code ausgeführt, aber die Messagequeue des Hauptprogrammes ändert sich dadurch nicht. D.h. deine Eventprozeduren liegen tot im Speicher und werden nie von irgendwem gecallt. Entweder du mogelst dich in die Queue hinein indem du den Programmfluss zu dir umleitest und selber auf die Meldungen reagierst, oder du verzichtest gleich ganz auf WindowMessages. Man kann Sockets zur Not auch im Polling-Mode (non-blocking) betreiben oder halt mehrere Threads aufmachen (wenn das nicht zu weiteren Problemen führt: Thema threadsafe etc).