如何正确创建 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.LoadLibrary
:
Python ctypes argument errors
并像这样声明函数:
proc myinit(procid : int) {.cdecl,exportc,dynlib.} =
discard
我想从 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.LoadLibrary
:
Python ctypes argument errors
并像这样声明函数:
proc myinit(procid : int) {.cdecl,exportc,dynlib.} =
discard