a simliar question. In my code, losts of XExNew, XXExDelete (in fact, more than these 2) proc will be created according to the same-name function in DLL file. For example const fltk = "fltk-c-1.3.3-64.dll" type long = int64 type Fl_ButtonEx* = object proc Fl_ButtonExNew (x: long, y: long, w: long, h: long, title: cstring=nil): ptr Fl_ButtonEx {.cdecl, importc: "Fl_ButtonExNew", dynlib: fltk, discardable.} proc Fl_ButtonExDelete(x: ptr Fl_ButtonEx) {.cdecl, importc: "Fl_ButtonExDelete", dynlib: fltk, discardable.} type Fl_BoxEx* = object proc Fl_BoxExNew (x: long, y: long, w: long, h: long, title: cstring=nil): ptr Fl_BoxEx {.cdecl, importc: "Fl_BoxExNew", dynlib: fltk, discardable.} proc Fl_BoxExDelete(x: ptr Fl_BoxEx) {.cdecl, importc: "Fl_BoxExDelete", dynlib: fltk, discardable.}
After studying above text, I came to import macros, strutils const fltk = "fltk-c-1.3.3-64.dll" type long = int64 macro DeclareEx*(name) : untyped = var typeStr = """ type nameEx* = object proc nameExNew*(x: long, y: long, w: long, h: long, title: cstring=nil): ptr nameEx {.cdecl, importc: "nameExNew", dynlib: fltk, discardable.} proc nameExDelete*(x: ptr nameEx) {.cdecl, importc: "nameExDelete", dynlib: fltk, discardable.} """ typeStr = replace(typeStr, "name", $name) return parseStmt(typeStr) DeclareEx(Fl_Button) DeclareEx(Fl_Box) but I get stack trace: (most recent call last) d.nim(15, 19) DeclareEx ..\..\msys64\home\USER\_nim\nim\lib\core\macros.nim(514, 17) parseStmt d.nim(17, 10) template/generic instantiation of `DeclareEx` from here ..\..\msys64\home\USER\_nim\nim\lib\core\macros.nim(514, 17) Error: unhandled exception: ..\..\msys64\home\USER\_nim\nim\lib\core\macros.nim(514, 5) Error: identifier expected, but got 'keyword proc' so any solution? thanks