【问题标题】:How to correctly create a nim/nimrod windows dll如何正确创建 nim/nimrod windows dll
【发布时间】:2015-09-29 08:30:25
【问题描述】:

我想从 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]

检查我使用dllexp.exe 的dll。 我还尝试使用 python ctypes 加载 dll,但我的导出都没有显示或可调用。不过,我可以使用 hexeditor 在生成的 dll 中看到 proc 名称。

我错过了什么?

【问题讨论】:

    标签: windows dll nim-lang


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-14
      相关资源
      最近更新 更多