Here is your problem:
Fl_Callback* = proc(widget: ptr Fl_Widget, pData: ptr any)
# ...
proc ButtonClick (button: ptr FL_WIDGET, arg: ptr any):**cint {.cdecl.}** =
RunIn other words, `Fl_Callback` is not cdecl and its return type is void while `ButtonClick` is cdecl and its return type is cint.
