![]() |
Callback Funktion programmieren
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. |
AW: Callback Funktion programmieren
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; |
AW: Callback Funktion programmieren
mercy - it works !
|
AW: Callback Funktion programmieren
Zitat:
Delphi-Quellcode:
Wofür der Callback...
if InitLibrary then
EntryPoint; Oder sollte der auf die DLL gehen? Mavarik |
AW: Callback Funktion programmieren
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz