Results 1 to 3 of 3

Thread: E2009 Incompatible types: 'method pointer and regular

  1. #1

    E2009 Incompatible types: 'method pointer and regular

    Ik krijg deze melding: [dcc32 Error] M3U2STRM.dpr(60): E2009 Incompatible types: 'method pointer and regular procedure', mijn code:
    Delphi Code:
    1. program M3U2STRM;
    2.  
    3. uses
    4.   Windows,
    5.   SysUtils,
    6.   Vcl.Forms,
    7.   untMain in '..\units\untMain.pas' {frmMain},
    8.   untXCReloaded in '..\units\untXCReloaded.pas';
    9.  
    10. {$R *.res}
    11.  
    12. // Connection changed
    13. procedure APIConnectChange(Sender: TObject; Connected: Boolean);
    14. begin
    15.   if Connected then
    16.   begin
    17.     // Load movies
    18.     // Load series
    19.     // Create strm files
    20.   end;
    21. end;
    22.  
    23. // Connection error
    24. procedure APIConnectError(Sender: TObject; Error: TXCConnectErrorType; ErrorMsg: string);
    25. var
    26.   S : string;
    27. begin
    28.   case Error of
    29.     cetHTTP     : S := Format('HTTP Error: %s', [ErrorMsg]);
    30.     cetParser   : S := Format('Parser Error: %s', [ErrorMsg]);
    31.     cetAuthZero : S := 'Please check your username and password. This account seems to be blocked or inactive!';
    32.   end;
    33. end;
    34.  
    35. // Request error
    36. procedure APIRequestError(Sender: TObject; Error: TXCRequestErrorType; ErrorMsg: string);
    37. var
    38.   S : string;
    39. begin
    40.   case Error of
    41.     retHTTP   : S := Format('HTTP Error: %s', [ErrorMsg]);
    42.     retParser : S := Format('Parser Error: %s', [ErrorMsg]);
    43.     retOther  : S := Format('Error: %s', [ErrorMsg]);
    44.     else
    45.       S := 'Unknown error. Please contact your provider.';
    46.   end;
    47. end;
    48.  
    49. var
    50.   API: TXCReloadedAPI;
    51. begin
    52.   if (ParamCount > 1) then
    53.   begin
    54.     API := TXCReloadedAPI.Create;
    55.     API.OnConnectChange := APIConnectChange;
    56.     API.OnConnectError  := APIConnectError;
    57.     API.OnRequestError  := APIRequestError;
    58.   end else
    59.   begin
    60.     Application.Initialize;
    61.     Application.MainFormOnTaskbar := True;
    62.     Application.Title := 'M3U 2 STRM';
    63.     Application.CreateForm(TfrmMain, frmMain);
    64.     Application.Run;
    65.   end;
    66. end.

    Ik wil dus dat de applicatie start met een form als deze gewoon gestart wordt, en als deze vanuit de taakplanner gestart wordt met extra command-line parameters, dat hij de TXCReloadedAPI aanmaakt en daarop verder werkt. Nu op zich gaat dat prima; maar ik krijg de melding omdat de procedures hierboven geen procedure of object zijn.
    Moet ik nu een class maken waarin ik die procedures zet? Of kan ik beter in de TXCReloadedAPI class gewoon in plaats van events te gebruiken daar direct de code plaatsen die ik anders in de events zou gebruiken?

  2. #2
    Counting your refs
    Join Date
    Feb 2002
    Location
    Lage Zwaluwe
    Posts
    2,112
    Het antwoord op de vraag "wat is beter" hangt er een beetje vanaf: *waarom* heb je daar in eerste instantie events voor gemaakt? Waarschijnlijk voor een stukje flexibiliteit / hergebruik.

    Je kunt hier prima even een los classje voor aanmaken om die events af te handelen.

    Er is als ik me goed herinner ook nog een simpel truukje om een losse functie/procedure te wrappen in een TMethod, en die dan weer te casten naar het juiste event type. Punt is: ik zou dat sowieso niet gebruiken hier, dat is voor noodgevallen. Als je echt heel benieuwd ben en google helpt niet dan zoeken we 't even na.
    Last edited by Paul-Jan; 24-Apr-20 at 13:48. Reason: Ik had een verhaal over de code die bij een tweede blik sowieso een uittreksel is

  3. #3
    Ik heb dit inderdaad gedaan omdat ik deze unit ook gebruik in een ander programma, zodat ik alles niet hoef te herschrijven. Ik heb het nu zo opgelost:

    Delphi Code:
    1. type
    2.   TXCAPIEventHandlers = class
    3.     class procedure APIConnectChange(Sender: TObject; Connected: Boolean);
    4.     class procedure APIConnectError(Sender: TObject; Error: TXCConnectErrorType; ErrorMsg: string);
    5.     class procedure APIRequestError(Sender: TObject; Error: TXCRequestErrorType; ErrorMsg: string);
    6.   end;
    7.  
    8. // Connection changed
    9. class procedure TXCAPIEventHandlers.APIConnectChange(Sender: TObject; Connected: Boolean);
    10. var
    11.   I : Integer;
    12.   J : Integer;
    13.   S : string;
    14.   M : string;
    15.   A : TXCReloadedAPI;
    16. begin
    17.   if Connected then
    18.   begin
    19.     A := (Sender as TXCReloadedAPI);
    20.   end;
    21. end;
    22.  
    23. // Connection error
    24. class procedure TXCAPIEventHandlers.APIConnectError(Sender: TObject; Error: TXCConnectErrorType; ErrorMsg: string);
    25. var
    26.   S : string;
    27. begin
    28.   case Error of
    29.     cetHTTP     : S := Format('HTTP Error: %s', [ErrorMsg]);
    30.     cetParser   : S := Format('Parser Error: %s', [ErrorMsg]);
    31.     cetAuthZero : S := 'Please check your username and password. This account seems to be blocked or inactive!';
    32.   end;
    33. end;
    34.  
    35. // Request error
    36. class procedure TXCAPIEventHandlers.APIRequestError(Sender: TObject; Error: TXCRequestErrorType; ErrorMsg: string);
    37. var
    38.   S : string;
    39. begin
    40.   case Error of
    41.     retHTTP   : S := Format('HTTP Error: %s', [ErrorMsg]);
    42.     retParser : S := Format('Parser Error: %s', [ErrorMsg]);
    43.     retOther  : S := Format('Error: %s', [ErrorMsg]);
    44.     else
    45.       S := 'Unknown error. Please contact your provider.';
    46.   end;
    47. end;
    48.  
    49. .........
    50.  
    51. API.OnConnectChange := TXCAPIEventHandlers.APIConnectChange;
    52. API.OnConnectError  := TXCAPIEventHandlers.APIConnectError;
    53. API.OnRequestError  := TXCAPIEventHandlers.APIRequestError;

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •