AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Procedure-Aufruf mit Reference

Ein Thema von Ykcim · begonnen am 16. Jan 2021 · letzter Beitrag vom 18. Jan 2021
Antwort Antwort
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
722 Beiträge
 
Delphi 10.4 Sydney
 
#1

Procedure-Aufruf mit Reference

  Alt 16. Jan 2021, 10:57
Hallo Zusammen,

ich habe wieder ein Brett vor dem Kopf...

Ich muss Proceduren in einer bestimmten Reihenfolge aufrufen und muss daher mit CallBacks arbeiten...

Delphi-Quellcode:
type
   TDataRecievedCallback = reference to procedure;
   TDataRecieved_JSResult = reference to procedure(JSResult: string);
   TDataRecieved_JSBoolean = reference to procedure(JSBoolean: Boolean);


procedure TMySQL.xData_Main_ConnectConnect(Sender: TObject);
var Design: TDesign_App;
begin
   Design:= TDesign_App.create;
   Try
      Get_Sprachen(nil);
      Get_Land(nil);
      Get_Company_Details( //TDataRecievedCallback
         @Get_CustProperties( //TDataRecievedCallback
            @Check_login_code( //TDataRecieved_JSBoolean ......... Diese Zeile markiert der Compiler und meint wahrscheinlich @Design.Create_Form_TVApp
               @Design.Create_Form_TVApp
            )
         )
      );
   Finally
      Design.Free;
   End;
end;
Beim Compilieren bekomme ich die Fehlermeldung:
Code:
[Fehler] TTVA_Data_ModuleUnit.pas(188): Incompatible type arg no. 1: Got "procedure(TDataRecieved_JSBoolean) of Object", expected "reference to procedure()"
Das sind die relvanten Procedure:
Delphi-Quellcode:
procedure TMySQL.Get_Company_Details(AOnDataRecieved: TDataRecievedCallback);
   procedure OnResponse(Response: TXDataClientResponse);
   begin
      //Daten verarbeiten
      if Assigned(AOnDataRecieved) then begin
         AOnDataRecieved();
      end;
   end;
begin
   //Aufruf eines Service
end;


procedure TMySQL.Get_CustProperties(AOnDataRecieved: TDataRecievedCallback);
   procedure OnResponse(Response: TXDataClientResponse);
   begin
      //Daten verarbeiten
      if Assigned(AOnDataRecieved) then begin
         AOnDataRecieved();
      end;
   end;
begin
   //Aufruf eines Services
end;

//Hier scheint etwas nicht zu stimmen - oder mit der angegebenen AOnDataRecieved Procedure, die danach folgt
procedure TMySQL.Check_login_code(AOnDataRecieved: TDataRecieved_JSBoolean);
   procedure OnResponse(Response: TXDataClientResponse);
   var JSObj: TJSObject;
         Ergebnis: boolean;
   begin
      JSObj:=TJSJSON.parseObject(Response.ResponseText);
      Ergebnis:= StrToBool(String(JSObj['value']));
      if (Assigned(AOnDataRecieved)) then begin
         AOnDataRecieved(Ergebnis);
      end;
   end;
begin
   //Aufruf eines Services
end;


procedure TDesign_App.Create_Form_TVApp(login_valid: boolean);
begin
   if login_valid=false then
      Create_LogIn;
   if Assigned(Form_TheVisitApp) then begin
      Form_TheVisitApp.WIC_Logo.URL:=MySQL.xWDS_Customerlogo_image.AsString;
   end;
end;
Könnt ihr mir helfen, das Ding zum Fliegen zu bringen?

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
105 Beiträge
 
#2

AW: Procedure-Aufruf mit Reference

  Alt 18. Jan 2021, 08:04
Ohne jetzt alles im Detail zu prüfen ...
Auch habe ich null Erfahrung mit "reference to X" ...
Aber Im Kommentar steht, dass Get_Company_Details vom Typ TDataRecievedCallback sein soll.
Nur TDataRecievedCallback hat keine Übergabeparameter.
Das dürfte schon das Problem sein.
Die Typen für die Prozeduren/Funktionen, die definiert sind, passen nicht zur Verwendung.

Das geht nicht:
Delphi-Quellcode:
type TMyProc = procedure;

Procedure DoSomething(theProc : TMyProc);
Begin
  theProc('Hallo');
End;
Das geht:
Delphi-Quellcode:
type TMyProc = procedure(const sText : String);

Procedure DoSomething(theProc : TMyProc);
Begin
  theProc('Hallo');
End;
Ich hoffe das hilft schon.

MfG Incocnito
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.519 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Procedure-Aufruf mit Reference

  Alt 18. Jan 2021, 08:15
PS: Die ganzen Typen muss man nicht selbst definieren, es gibt in System.SysUtils schon TProc = reference to procedure() und TProc<T> = reference to procedure(arg: T)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf