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