如何正确创建 nim/nimrod windows dll

How to correctly create a nim/nimrod windows dll

我想从 nim 代码创建一个 dll。 但是我没有注册 "NimMainInner" 以外的一些其他出口。 即使我尝试这个简单的例子它也不起作用:

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

我用nim c --app:lib libh4x.nim编译了它 和 nim c -d:release --app:lib --no_main libh4x.nim

我用Nim Compiler Version 0.11.2 (2015-05-04) [Windows: i386]

检查我使用的 dll dllexp.exe。 我还尝试使用 python ctypes 加载 dll,但我的导出中的 none 已显示或可调用。不过,我可以使用十六进制编辑器在生成的 dll 中看到 proc 名称。

我错过了什么?

缺少 dynlib 编译指示。所以我将定义更改为:

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

现在可以使用了。

注意:如果将它与 pythons ctypes 和函数参数一起使用,请确保使用 ctypes.cdll.LoadLibrary 而不是 ctypes.windll.LoadLibraryPython ctypes argument errors

并像这样声明函数:

proc myinit(procid : int) {.cdecl,exportc,dynlib.} =
  discard