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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何正确创建一个nim / nimrod windows dll相关的知识,希望对你有一定的参考价值。

我想用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名称。

我错过了什么?

答案

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

以上是关于如何正确创建一个nim / nimrod windows dll的主要内容,如果未能解决你的问题,请参考以下文章

如何在 nim 中创建一个 qt 应用程序

想在wind中试验python接口,该怎么做到

如何从 Nim 的主块返回退出代码?

如何从 Nim 的导入失败中恢复?

AcWing 891. Nim游戏(nim博弈)

hdu2176nim博弈