AGB  ·  Datenschutz  ·  Impressum  







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

Prozedur umleiten?

Ein Thema von Pseudemys Nelsoni · begonnen am 26. Okt 2004 · letzter Beitrag vom 23. Okt 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Prozedur umleiten?

  Alt 26. Okt 2004, 08:36
hi,

ich schreib grad eine dll, und versuche eine verbindung auzubauen und möchte OnConnect reagieren...aber wieso geht das hier nicht bzw was ist daran falsch:

Delphi-Quellcode:
library Project2;

uses
  Classes, ScktComp, md5;

{$R *.res}

procedure sockConnect(Socket: TSocketNotifyEvent);
begin
  Socket. // <<< hier nach dem "." erscheint nichtmal ein popup...
end;

var
  sock: TClientSocket;

begin
  sock := TClientSocket.Create(nil);
  sock.Address := '213.39.196.118';
  sock.Port := 1234;
  sock.OnConnect := sockConnect;
  sock.Open;
end.
?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: Prozedur umleiten?

  Alt 26. Okt 2004, 08:41
Ich weiss gar nicht wie strikt das gehandabt wird, aber fehlt da nicht noch interface und implementation? Ach ne. Im Programm/library ist es ja auch kein Problem.

Tja manchmal funktioniert das Popup-Fenster einfach nicht richtig.
Problem ist hier aber vermutlich, dass OnConnect als Methodenzeiger (procedure of object) definiert ist. Das bedeutet das die Prozedur auch in einem Objekt eingebettet werden muss. Such mal hier im Forum nach Hier im Forum suchenMethodenzeiger ich glaube da gab es auch was, wie man einer procedure of object eine normale Procedure zuweisen kann.

P.S: Einfach mal kompilieren. Und dann mal schauen, was für Fehler kommen. Vielleicht musst du einfach eine weitere Unit miteinbinden.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Prozedur umleiten?

  Alt 26. Okt 2004, 08:43
Hi,

Ich denke dein "OnConnect" erwartet eine Prozedur vom Typ TNotifyEvent. Das was du das zuweist, ist jedoch nur eine Hier im Forum suchenreguläre Prozedur. In Wahrheit wird ein Hier im Forum suchenMethodenzeiger erwartet. Das erreichst Du am Besten, indem Du Deine Prozedur in eine eigene Klasse packst.

Delphi-Quellcode:
THandler = class(TObject)
  public
    procedure sockConnect(Sender: TObject; Socket: TCustomWinSocket);
end;

// ...

procedure THandler.sockConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
  //code
end;

// ...

var
  Handler: THandler;
begin
  Handler := THandler.Create;
  sock := TClientSocket.Create(nil);
  sock.Address := '213.39.196.118';
  sock.Port := 1234;
  sock.OnConnect := Handler.sockConnect;
  sock.Open;
  // ...
  // Handler irgendwann dann freigeben
end.
Ich hoffe das hilft Dir.

mfG
mirage228

Edit: Die Deklaration Deiner OnConnect Methode war nicht ganz korrekt.
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#4

Re: Prozedur umleiten?

  Alt 26. Okt 2004, 08:44
heisst das ich muss extra ein object erzeugen um eine methode umzuleiten?

@mirage, ich teste das mal, danke



BTW: wieso kommt denn kein "of object" mit dran?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Prozedur umleiten?

  Alt 26. Okt 2004, 08:46
Zitat von Pseudemys Nelsoni:
heisst das ich muss extra ein object erzeugen um eine methode umzuleiten?
Hi,

es geht auch anders:

Delphi-Quellcode:
procedure sockConnect(Self, Sender: TObject; Socket: TCustomWinSocket);
begin
  //code
end;

var
  FOnConnect: TSocketNotifyEvent;
begin
  sock := TClientSocket.Create(nil);
  sock.Address := '213.39.196.118';
  sock.Port := 1234;
  TMethod(FOnConnect).Code := @sockConnect;
  TMethod(FOnConnect).Data := nil; // die Variable Self ist dann in sockConnect = nil
  sock.OnConnect := FOnConnect;
  sock.Open;
end.
Edit: Die Deklaration von "OnConnect" sieht so aus, die Prozedur von dir war falsch :-\
procedure (Sender: TObject; Socket: TCustomWinSocket) of object

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#6

Re: Prozedur umleiten?

  Alt 26. Okt 2004, 09:23
Zitat von Pseudemys Nelsoni:
BTW: wieso kommt denn kein "of object" mit dran?
Das of object ist nur ein Zusatz bei der Definition von Prozedur/Methodenzeigern.

Delphi-Quellcode:
type
  TNotifyEvent = procedure(Sender: TObject) of object;
Jetzt hast du einen Methodenzeiger. Wenn du jetzt eine Variable vom Typ TNotifyEvent anlegst, kannst du nur Methoden (Prozeduren/Funktionen die innerhalb von Objekten liegen) zu weisen.

definierst du dagegen

Delphi-Quellcode:
type
  TNotifyEvent = procedure(Sender: TObject);
Also ohne of object, dann kannst du der einer Variable vom Typ TNotifyEvent nur eine normale Prozedur/Funktion zuweisen. Ein Zuweisung von einer Methode (siehe oben) funktioniert hier nicht. Problem ist ja, dass bei Methoden immer der Zeiger auf Self (also das Objekt) mitgeführt werden müssen. Klarer wird dies wenn du mal sizeof(TNotifyEvent) in beiden Fällen machst. Da wirst du sehen, dass im ersten Fall der Typ 8 Byte groß ist (Zeiger auf Prozedur und auf das Objekt) und im zweiten Fall nur 4 Byte (nur Zeiger auf Prozedur).

P.S: TNotifyEvent ist vielleicht etwas unglücklich, da es diesen Typen ja bereits gibt, aber hoffe, das macht das Problem etwas klarer.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#7

Re: Prozedur umleiten?

  Alt 26. Okt 2004, 10:05
moin,

jo@jim, danke 8)

@mirage:

Delphi-Quellcode:
library Project2;

uses
  ScktComp,
  md5,
  Unit1 in 'Unit1.pas';

{$R *.res}

procedure sockConnect(Socket: TSocketNotifyEvent);
begin
  Socket.SendText('hi'); <<< funktioniert nicht
end;

var
  sock: TClientSocket;
  OnConnect: TSocketNotifyEvent;

begin
  sock := TClientSocket.Create(nil);
  sock.Address := '213.39.196.118';
  sock.Port := 1234;
  TMethod(OnConnect).Code := @sockConnect;
  TMethod(OnConnect).Data := nil;
  sock.OnConnect := OnConnect;
  sock.Open;
end.


weisst du warum das nicht funzt?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Prozedur umleiten?

  Alt 26. Okt 2004, 10:07
Hi,

das funktioniert nicht, weil deine SockConnect Prozedur falsch ist. Ich habe die richtige in meinem obigen Post bereits eingefügt.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#9

Re: Prozedur umleiten?

  Alt 26. Okt 2004, 11:12
eleganter geht es so:

Delphi-Quellcode:
type
  THandler = class(TObject)
    class procedure OnConnect(Sender: TObject; Socket: TCustomWinSocket);
  end;

class procedure THandler.OnConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
// Code
end;


begin
  Sock := TClientSocket.Create(nil);
  try
    Sock.Address := '213.39.196.118';
    Sock.Port := 1234;
    Sock.OnConnect := THandler.OnConnect;
    Sock.Open;
....
  finally
    Sock.free;
  end;
end;
Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Prozedur umleiten?

  Alt 26. Okt 2004, 12:18
Hi Hagen,

super Vorschlag , da habe ich gar nicht dran gedacht

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  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 11:39 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