Für Fragen rund um die Ide und zum Debugger
			
		
		
			
				
																			
								Targion 							 
									
		Beiträge:  688 Registriert:  Mi 3. Okt 2007, 21:00OS, Lazarus, FPC:  Linux (L 0.9.29 FPC 2.4.2)CPU-Target:  x86_64 
		
						
						
													
							
						
									
						Beitrag 
					 
								von Targion  Do 7. Feb 2008, 19:10 
			
			
			
			
			Hallo.
Ich arbeite mit den Synapse-Komponenten, um eine Datei aus dem Internet herunterzuladen usw.
Mit folgendem Code weise ich der Komponente ein Event zu:
SockCallBack ist so definiert:
Code: Alles auswählen 
procedure  SockCallBack  (Sender: TObject; Reason:   THookSocketReason; const   Value: string ) ;Code: Alles auswählen 
unit1.pas(656,33) Error: Wrong number of parameters specified for call to "SockCallBack" 
Was mache ich falsch? Ich habe das Ereignis überprüft, die Parameter stimmen.
					Zuletzt geändert von 
Targion  am Do 7. Feb 2008, 20:15, insgesamt 1-mal geändert.
									
 
		 
				
		
		 
	 
	
		
		
			
				
								theo 							 
									
		Beiträge:  11038 Registriert:  Mo 11. Sep 2006, 19:01 
		
						
						
									
						Beitrag 
					 
								von theo  Do 7. Feb 2008, 19:20 
			
			
			
			
			Wenn du im objfpc Mode bist, musst du
HTTP.Sock.OnStatus:=@SockCallBack;
schreiben, sonst Delphi Modus in der IDE einschalten oder im Code {$mode objfpc} mit {$mode delphi} ersetzen.
Den Rest dazu liest du hier: 
http://synapse.ararat.cz/doku.php/public:howto:onstatus " onclick="window.open(this.href);return false;
 
		 
				
		
		 
	 
	
		
		
			
				
																			
								Targion 							 
									
		Beiträge:  688 Registriert:  Mi 3. Okt 2007, 21:00OS, Lazarus, FPC:  Linux (L 0.9.29 FPC 2.4.2)CPU-Target:  x86_64 
		
						
						
									
						Beitrag 
					 
								von Targion  Do 7. Feb 2008, 19:36 
			
			
			
			
			Ja, das Dokument kannte ich vorher schon.
Wenn ich in den "Delphi-Modus" schalte oder @SockCallBack benutze bekomme ich jetzt jedoch folgende Meldung:
Code: Alles auswählen 
unit1.pas(656,21) Error: Incompatible types: got "TForm1.SockCallBack(TObject, THookSocketReason,const AnsiString)"  expected "<procedure variable type of procedure(TObject, THookSocketReason,const AnsiString) of object;Register>" 
So eine Meldung hatte ich noch nie...
 
		 
				
		
		 
	 
	
		
		
			
				
								theo 							 
									
		Beiträge:  11038 Registriert:  Mo 11. Sep 2006, 19:01 
		
						
						
									
						Beitrag 
					 
								von theo  Do 7. Feb 2008, 19:43 
			
			
			
			
			Wie sieht denn dein Code aus?
			
			
									
									
						 
		 
				
		
		 
	 
	
		
		
			
				
																			
								Targion 							 
									
		Beiträge:  688 Registriert:  Mi 3. Okt 2007, 21:00OS, Lazarus, FPC:  Linux (L 0.9.29 FPC 2.4.2)CPU-Target:  x86_64 
		
						
						
									
						Beitrag 
					 
								von Targion  Do 7. Feb 2008, 19:53 
			
			
			
			
			Hmm. Dein Code funktioniert (In genau dieser Form) auch nicht. Das muss also mit den Typn zusammenhängen. Dies steht bei mir als Deklaration oben:
Code: Alles auswählen 
type 
 
    THookSocketReason = (
    HR_ResolvingBegin,
    HR_ResolvingEnd,
    HR_SocketCreate,
    HR_SocketClose,
    HR_Bind,
    HR_Connect,
    HR_CanRead,
    HR_CanWrite,
    HR_Listen,
    HR_Accept,
    HR_ReadCount,
    HR_WriteCount,
    HR_Wait,
    HR_Error
    );
 
    THookSocketStatus = procedure (Sender: TObject; Reason: THookSocketReason;
    const  Value: string )  of  object ;TForm1  = class (TForm)
[...]
Hoffentlich ist da ein Fehler drin... Sonst weis ich nicht, wo ich noch suchen könnte. 
 
		 
				
		
		 
	 
	
		
		
			
				
								theo 							 
									
		Beiträge:  11038 Registriert:  Mo 11. Sep 2006, 19:01 
		
						
						
									
						Beitrag 
					 
								von theo  Do 7. Feb 2008, 20:10 
			
			
			
			
			Du musst doch das Zeug nicht nochmal definieren, das ist doch in blcksock schon gemacht. Aber anwenden solltest du's. Lies mal was über Objectpascal.
Code: Alles auswählen 
TForm1  = class (TForm)
    Button1: TButton;
    procedure  Button1Click (Sender: TObject) ;private 
    
  public 
    
    procedure  HookSock (Sender: TObject; Reason: THookSocketReason;
      const  Value: string ) ;end ;
 
var 
  Form1: TForm1; 
 
implementation 
 
 
procedure  TForm1 .Button1Click (Sender: TObject) ;var  sock: TTCPBlockSocket;
begin 
sock:= TTCPBlockSocket.create;
sock.OnStatus:=@HookSock;
sock.free;
end ;
 
procedure  TForm1 .HookSock (Sender: TObject; Reason: THookSocketReason;
const  Value: string ) ;begin 
end ; 
		 
				
		
		 
	 
	
		
		
			
				
																			
								Targion 							 
									
		Beiträge:  688 Registriert:  Mi 3. Okt 2007, 21:00OS, Lazarus, FPC:  Linux (L 0.9.29 FPC 2.4.2)CPU-Target:  x86_64 
		
						
						
									
						Beitrag 
					 
								von Targion  Do 7. Feb 2008, 20:15 
			
			
			
			
			 Och ne! Dass das Zeug in blcksock nochmal drin ist, hätte ich eigentlich wissen müssen... Aber ich habe das event nach der von dir verlinkten Seite erstellt, da stand nichts von blcksort... Klar, dass die Typen nicht passten. Danke für die Hilfe (und dass du nicht die Nerven verloren hast)
Ab in die Versenkung mit dem Thread  
 
		 
				
		
		 
	 
	
		
		
			
				
																			
								mschnell 							 
									
		Beiträge:  3444 Registriert:  Mo 11. Sep 2006, 10:24OS, Lazarus, FPC:  svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)CPU-Target:  X32 / X64 / ARMv5Wohnort:  Krefeld 
		
						
						
									
						Beitrag 
					 
								von mschnell  Fr 8. Feb 2008, 10:31 
			
			
			
			
			theo hat geschrieben: Wenn du im objfpc Mode bist, musst du
 Sind bei der Verwendung von {$mode delphi} irgendwelche Probleme zu erwarten, oder darf man das ruhig standardmäßig machen ? 
-Michael
 
		 
				
		
		 
	 
	
		
		
			
				
								theo 							 
									
		Beiträge:  11038 Registriert:  Mo 11. Sep 2006, 19:01 
		
						
						
									
						Beitrag 
					 
								von theo  Fr 8. Feb 2008, 12:48 
			
			
			
			
			mschnell hat geschrieben: Sind bei der Verwendung von {$mode delphi} irgendwelche Probleme zu erwarten, oder darf man das ruhig standardmäßig machen ? 
Kann ich nicht genau sagen, da ich nicht genau weiss, was alles davon betroffen ist.
Im Allgemeinen denke ich aber, dass es kein Problem sein sollte.
 
		 
				
		
		 
	 
	
		
		
			
				
																			
								Christian 							 
									
		Beiträge:  6079 Registriert:  Do 21. Sep 2006, 07:51OS, Lazarus, FPC:  iWinux (L 1.x.xy FPC 2.y.z)CPU-Target:  AVR,ARM,x86(-64)Wohnort:  Dessau
				Kontaktdaten: 
				
			 
				
		 
		
						
						
									
						Beitrag 
					 
								von Christian  Fr 8. Feb 2008, 13:14 
			
			
			
			
			Es ist aber unschön, weil man sich damit wieder selbst ein Bein stellen kann. Der Mode Delphi erlaubt nämlich einige Sachen die der compiler durchaus falsch auslegen kann und dann suchst du dir nen wolf nach nem Bug der eigentlich gar nicht da ist. 
Wenn du probleme hast, ein Event zu deklarieren lass es die CodeTools für dich machen.
Schreib einfach
MeineKomponente.OnIrgendwas := < und drück dann hier Strg+Umschalt+C
Damit wird das Event komplett richtig deklariert und reingesprungen und du musst dir nicht mehr den Kopf zerbrechen wie man Events richtig deklariert 
.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
						 
		 
				
		
		 
	 
	
		
		
			
				
																			
								mschnell 							 
									
		Beiträge:  3444 Registriert:  Mo 11. Sep 2006, 10:24OS, Lazarus, FPC:  svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)CPU-Target:  X32 / X64 / ARMv5Wohnort:  Krefeld 
		
						
						
									
						Beitrag 
					 
								von mschnell  Fr 8. Feb 2008, 22:49 
			
			
			
			
			Manche wollen Sourcode schreiben, der sich sowohl mit Lazarus als auch mit Delphi kompilieren lässt....