type
      InitSubmodule = proc(mem:seq[string]): Submodule{.gcsafe, cdecl.}
      NewSubmodule = proc(mem:seq[string]): Submodule{.gcsafe, cdecl.}
    
    when isMainModule:
      const themeFile = currentSourcePath.parentDir / "dllgen" / "theme.nim"
      const themePath = currentSourcePath.parentDir / "dllgen" / libThemeName
      let cmd = "nim c --gc:boehm -d:createNimRtl " & (when defined(release): 
"-d:release" else: "") &
          " --app:lib --verbosity:0 --hints:off -w:off " & themeFile
      let r = execCmdEx(cmd)
      if r.exitCode != 0:
        removeFile(themePath)
        quit(1)
      let libTheme = loadLib(themePath)
      let initSubmodule = cast[InitSubmodule](libTheme.symAddr("initSubmodule"))
      echo initSubmodule(@["a","b"])
      let newSubmodule = cast[NewSubmodule](libTheme.symAddr("newSubmodule"))
      echo newSubmodule(@["a","b"])
    
    
    Run

I get 
    
    
    (name: "Anonymous", mem: @["a", "b"])
    (name: "", mem: @[])
    
    
    Run

I'v create a repo to demonstrate this problem.

see the CI result. 
<https://github.com/bung87/dllgen/runs/3015081926?check_suite_focus=true>

Reply via email to