5

我想从 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,但我的导出都没有显示或可调用。不过,我可以使用 hexeditor 在生成的 dll 中看到 proc 名称。

我在这里错过了什么?

4

1 回答 1

5

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
于 2015-09-29T09:07:47.310 回答