How to correctly create a nim/nimrod windows dll
Asked Answered
B

1

6

I want to create a dll from nim code. But i failed to register some other exports than "NimMainInner". Even if i try this simple example its not working:

proc Hellow(): cint {.exportc.} =
  echo("hello")
  return 1

i've compiled it with nim c --app:lib libh4x.nim and nim c -d:release --app:lib --no_main libh4x.nim

i use Nim Compiler Version 0.11.2 (2015-05-04) [Windows: i386]

to inspect the dll i use dllexp.exe. I've also tried to load the dll with python ctypes, but none of my exports are shown or are callable. I can see the proc name in the resulting dll with an hexeditor, though.

What have i missed here?

Bullyrag answered 29/9, 2015 at 8:30 Comment(0)
B
7

The dynlib pragma was missing. So i changed the definition to:

proc Hellow(): cint {.exportc,dynlib.} =
  echo("hello")
  result = 1

now it works.

Note: If you use this with pythons ctypes and with function parameters make sure to use ctypes.cdll.LoadLibrary instead of ctypes.windll.LoadLibrary: Python ctypes argument errors

and to declare the function like this:

proc myinit(procid : int) {.cdecl,exportc,dynlib.} =
  discard
Bullyrag answered 29/9, 2015 at 9:7 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.