Hallo Forum!
Hab mal eine Frage zu Funktionspointern. Ich verwende eine externe C-Bibliothek. Um ein Callback zu realisieren nimmt eine der verwendeten Funktionen ein Funktionspointer entgegen. Dieser ist vom Typ void* - also Pointer in Delphi.
Jetzt habe ich eine Prozedur "CallbackProc" erstellt, die nun als Pointer übergeben werden soll. Dazu wiederum ist die Funktion "SetupCallback" zuständig. Das Problem ist nur, dass meine Callback-Prozedur vom Typ "TCallbackProc" ist und ich keine Ahnung hab, wie ich daraus einen Pointer für die C-Funktion machen soll.
Code:
unit CallbackTest;
interface
type
TCallbackProc = procedure(ImageIpl: P_IplImage);
function setCallback(callback: Pointer); cdecl;
procedure SetupCallback;
procedure CallbackProc(ImageIpl: P_IplImage);
implementation
var
CallbackProcVar: TCallbackProc;
function setCallback(callback: Pointer); external 'abc.dll';
procedure CallbackProc(ImageIpl: P_IplImage);
begin
; // nix
end;
procedure SetupCallback;
begin
CallbackProcVar := CallbackProc;
setCallback(CallbackProcVar);
end;
end.
Bei dem oben abgebildeten Code sagt mir der Compiler jedenfalls "Nicht genügend wirkliche Parameter" in der Zeile "setCallback(CallbackProcVar);" ...kein Wunder: Ich übergebe ja auch einen Pointer, wie gefordert.
Was nun?