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 

Reply via email to