AGB  ·  Datenschutz  ·  Impressum  







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

Callback Funktion programmieren

Ein Thema von paule32.jk · begonnen am 22. Aug 2024 · letzter Beitrag vom 23. Aug 2024
Antwort Antwort
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#1

Callback Funktion programmieren

  Alt 22. Aug 2024, 14:42
Hallo,
ich habe zwei Pascal-Quellen, und ich möchte eine Callback-Funktion schreiben, aber ich scheitere daran:

Delphi-Quellcode:
unit misc;

interface
uses Windows, SysUtils;

type
    TMainCallback = procedure of object;

    function InitLibrary(Callback: TMainCallback): Boolean;

implementation
uses fpcmain;

function ErrorMessage(s: AnsiString): Boolean; cdecl; external dllname;

function InitLibrary(Callback: TMainCallback): Boolean;
begin
  DLLHandle := LoadLibrary('fpc-qt.dll');
  if DLLHandle = 0 then
  begin
    ErrorMessage('Error: DLL could not be loaded.');
    Halt(1);
  end;
  try
    Callback;
  finally
      FreeLibrary(DLLHandle);
      ReadLn;
      ExitProcess(0);
  end;
end;

end.
Delphi-Quellcode:
{$APPTYPE CONSOLE}
program fpcqt;
uses
  Windows,
  QCharClass,
  fpcmain in 'fpcmain.pas',
  misc in 'misc.pas';

var
    Callback: TMainCallback;

procedure EntryPoint;
var
    myQChar: QChar;
begin
    myQChar := QChar.Create;

    if myQChar.isDigit then
    WriteLn('ok') else
    WriteLn('not ok');
    Readln;
    myQChar.Free;
end;

begin
    Callback := EntryPoint;
    InitLibrary(Callback);
end.
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
509 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Callback Funktion programmieren

  Alt 22. Aug 2024, 14:51
Du definerst TMainCallback als procedure of object, heisst die Prozedur muss in einer Klasse stehen. EntryPoint hingegen ist eine "globale Prozedur" und kann deswegen nicht zugewiesen werden. Du müsstest TMainCallback einfach als procedure definieren.

Delphi-Quellcode:
type
    TMainCallback = procedure;
Milos
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Callback Funktion programmieren

  Alt 22. Aug 2024, 16:36
mercy - it works !
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Callback Funktion programmieren

  Alt 22. Aug 2024, 19:20
mercy - it works !
emm...

Delphi-Quellcode:
if InitLibrary then
  EntryPoint;
Wofür der Callback...

Oder sollte der auf die DLL gehen?

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von paule32.jk
paule32.jk

Registriert seit: 24. Sep 2022
Ort: Planet Erde
356 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Callback Funktion programmieren

  Alt 23. Aug 2024, 22:04
ich habe eine InitLibrary Funktion, in der der Callback in ein try except Block eingebettet ist:
Delphi-Quellcode:
{$ifdef FPC}
    {$mode delphi}{$H+}
{$else}
    {$APPTYPE CONSOLE}
{$endif}
program fpcqt;
uses
  {$ifdef win64}
  Windows,
  {$endif }
  appsettings in 'pas\appsettings.pas',
  misc in 'pas\misc.pas',
  fpcmain in 'pas\fpcmain.pas',
  QCharClass in 'pas\QCharClass.pas';

procedure EntryPoint(argc: Integer; argv: Array of String);
var
    myQChar: QChar;
begin
    myQChar := QChar.Create;

    if myQChar.isDigit then
    WriteLn('ok') else
    WriteLn('not ok');
    Readln;
    myQChar.Free;
end;

begin
    InitLibrary( EntryPoint );
end.
Delphi-Quellcode:
{$ifdef FPC}
    {$mode delphi}{$H+}
{$endif}
unit misc;

interface
uses
    {$ifdef win64}
    Windows,
    {$endif}
    SysUtils;

const DLLname = 'fpc-qt.dll';
type
    TMainCallback = procedure(argc: Integer; argv: Array of String);

    function InitLibrary(Callback: TMainCallback): Boolean;
    function ErrorMessage(s: AnsiString): Boolean; cdecl; external dllname;

implementation
uses fpcmain;

function InitLibrary(Callback: TMainCallback): Boolean;
begin
  DLLHandle := LoadLibrary('fpc-qt.dll');
  if DLLHandle = 0 then
  begin
    ErrorMessage('Error: DLL could not be loaded.');
    Halt(1);
  end;
  try
    Callback(ParamCount, ParamStr(1));
  finally
      FreeLibrary(DLLHandle);
      ReadLn;
      Halt(0);
  end;
end;

end.
Frag doch einfach
Alles was nicht programmiert werden kann, wird gelötet
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:38 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