Hi everyone, First of all, I am sorry if this is not the best place for this interoperability issue.
The problem I want to solve is how to make a Free Pascal binding for to the following piece of C code: typedef struct _CCDBS { void *userdata; char buttons[256]; void *internal; }CCDBS; typedef int (ELCALLBACK *getExButtonStates)(CCDBS *); #define EXTERNAL_DEV_NONE ((getExButtonStates)0) #define EXTERNAL_DEV_CEDRUS ((getExButtonStates)1) #define EXTERNAL_DEV_SYS_KEYBOARD ((getExButtonStates)2) int ELCALLTYPE enable_external_calibration_device(getExButtonStates buttonStatesfcn, const char * config, void *userData); Questions (1) I have no idea on how to translate these god-casts, eg., ((getExButtonStates)0), to free pascal. Right now, I think that even if I don't really need them, I just want to understand and learn in the process. (2) So, the whole point here is binding the "enable_external_calibration_device" function. It expects a "getExButtonStates buttonStatesfcn". Can you check if my current binding is right? type PCCDBS = ^TCCDBS; TCCDBS = record userdata: Pointer; buttons: array[0..255] of Char; internal: Pointer; end; TGetExButtonStatesFunction = function (accdbs: PCCDBS): Int32; ELCALLTYPE function enable_external_calibration_device( buttonStatesfcn: TGetExButtonStatesFunction; config: PChar; userData: Pointer): Int32; ELCALLTYPE ELDLL (3) I am using the ELCALLTYPE macro just because they were using them too, I am assuming backward compatibility. But I am not sure if I really need them. EyeLink code depends on custom SDL2 headers and I am running SDL2 Free Pascal related stuff just fine (and it has cdecl in everything). What do you think about that? For reference, this is the macro: {$ifndef ELCALLTYPE} {$IFDEF Windows} {$DEFINE ELCALLTYPE := stdcall;} {$ELSEIF Linux} {$DEFINE ELCALLTYPE := cdecl;} {$ELSE} {$DEFINE ELCALLTYPE := cdecl;} {$ENDIF} {$endif} (4) I can send the code and soon will release it on my GitHub (cpicanco). Best. R PS.: You can find a related discussion here https://stackoverflow.com/questions/76427311/free-pascal-bindings-for-a-typedef-function-inside-a-define-macro-and-a-number-o
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal