I have posted days ago [https://forum.nim-lang.org/t/4522](https://forum.nim-lang.org/t/4522) in which I try to bind xcgui which is a free 32bits dll for windows
Now I try to bind FLTK([http://www.fltk.org)](http://www.fltk.org\)). I can compile FLTK, test, examples and fluid with my MSYS2+MingW64 on Win7 64 bits I know there is already [https://github.com/Skrylar/nfltk](https://github.com/Skrylar/nfltk), but so bad, the test.nim can not be compiled, my msys2 halted for hours on lines Hint: nimwidget [Processing] CC: fltk_test CC: fltk_enumerations Run However I am not trying to translated the official FLTK C header by myself again. C's pointer are always beats me, and I found a nice FLTK binding( and tons of examples) for freebasic by D.J.Peters on [https://www.freebasic.net/forum/viewtopic.php?f=14&t=24547](https://www.freebasic.net/forum/viewtopic.php?f=14&t=24547) In the work of D.J.Peters, there are prebuilt fltk-c-1.3.3-32.dll fltk-c-1.3.3-64.dll libfltk-c-1.3.3-32-arm.so libfltk-c-1.3.3-32-syslib.so libfltk-c-1.3.3-32.so libfltk-c-1.3.3-64-syslib.so libfltk-c-1.3.3-64.so Run so I just mimicked and got the following code import winim # for the L"" type long = int16 Fl_Widget = int16 Fl_Window = int16 Fl_Button = int16 #~ Fl_Callback = int16 const fltk* = "fltk-c-1.3.3-64.dll" type Ihandle = object PIhandle* = ptr Ihandle Icallback* = proc (arg: PIhandle): cint {.cdecl.} Fl_Callback* = proc(widget: ptr Fl_Widget, pData: ptr any) proc Fl_WindowNew(byval: long, h: long, title:cstring): ptr Fl_Window{. cdecl, importc: "Fl_WindowNew", dynlib: fltk, discardable.} proc Fl_ButtonNew(x: long, y: long, w: long, h: long, label: cstring) : ptr Fl_Button{. cdecl, importc: "Fl_ButtonNew", dynlib: fltk, discardable.} proc Fl_WidgetSetCallback(wgt: ptr Fl_Widget, cb:Fl_Callback){. cdecl, importc: "Fl_WidgetSetCallback", dynlib: fltk, discardable.} proc Fl_WindowShow(win: ptr Fl_Window){. cdecl, importc: "Fl_WindowShow", dynlib: fltk, discardable.} proc Fl_Run(): long{. cdecl, importc: "Fl_Run", dynlib: fltk, discardable.} proc Fl_WidgetCopyLabel(wgt: ptr Fl_Widget; caption: ptr WCHAR){. cdecl, importc: "Fl_WidgetCopyLabel", dynlib: fltk, discardable.} proc ButtonClick (button: ptr FL_WIDGET, arg: ptr any):cint {.cdecl.} = Fl_WidgetCopyLabel(button, "do it again") var Win = Fl_WindowNew(320, 200, "What a shiny Window :-)") var Btn = Fl_ButtonNew(10, 10, 120, 32, "click me") #~ Fl_WidgetSetCallback(Btn, ButtonClick) #~ Fl_WidgetSetCallback(cast[ptr Fl_Widget](Btn), (ButtonClick)) #~ Fl_WidgetSetCallback(cast[ptr Fl_Widget](Btn), cast[Fl_Callback](ButtonClick)) Fl_WindowShow(Win) Fl_Run() Run this code can run without the Fl_WidgetSetCallback line. If I use Fl_WidgetSetCallback(Btn, ButtonClick) Run I get a.nim(45, 21) Error: type mismatch: got <ptr Fl_Button, proc (button: ptr Fl_Widget, arg: ptr GenericParam): cint{.cdecl.}> but expected one of: proc Fl_WidgetSetCallback(wgt: ptr Fl_Widget; cb: Fl_Callback) first type mismatch at position: 2 required type: Fl_Callback but expression 'ButtonClick' is of type: proc (button: ptr Fl_Widget, arg: ptr GenericParam): cint{.cdecl.} expression: Fl_WidgetSetCallback(Btn, ButtonClick) Run elif I use Fl_WidgetSetCallback(cast[ptr Fl_Widget](Btn), (ButtonClick)) Run I get a.nim(46, 21) Error: type mismatch: got <ptr Fl_Widget, proc (button: ptr Fl_Widget, arg: ptr GenericParam): cint{.cdecl.}> but expected one of: proc Fl_WidgetSetCallback(wgt: ptr Fl_Widget; cb: Fl_Callback) first type mismatch at position: 2 required type: Fl_Callback but expression 'ButtonClick' is of type: proc (button: ptr Fl_Widget, arg: ptr GenericParam): cint{.cdecl.} expression: Fl_WidgetSetCallback(cast[ptr Fl_Widget](Btn), ButtonClick) Run elif I use Fl_WidgetSetCallback(cast[ptr Fl_Widget](Btn), cast[Fl_Callback](ButtonClick)) Run I get a.nim(47, 53) Error: cannot cast to a non concrete type: 'Fl_Callback' Run Please, can anyone give clear help? Thanks
