如何正确创建一个nim / nimrod windows dll

问题描述 投票:5回答:1

我想用nim代码创建一个dll。但我没有注册其他一些出口而不是“NimMainInner”。即使我尝试这个简单的例子它不工作:

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

我用nim c --app:lib libh4x.nimnim 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名称。

我错过了什么?

windows dll nim
1个回答
4
投票

dynlib pragma失踪了。所以我把定义改为:

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
© www.soinside.com 2019 - 2024. All rights reserved.