# plugin.nimvar data = 0{.push dynlib exportc.}proc setup*(num:int) = data = num echo "Plugin Setup!"proc getData*: int = data{.pop.}
# app.nimimport dynlibtype SetupProc = proc(num:int) {.nimcall.} GetDataProc = proc(): int {.nimcall.}proc testPlugin(path:string) = let lib = loadLib(path) if lib != nil: let setupAddr = lib.symAddr("setup") let getDataAddr = lib.symAddr("getData") if setupAddr != nil and getDataAddr != nil: let setup = cast[SetupProc](setupAddr) let getData = cast[GetDataProc](getDataAddr) setup(123) echo "Plugin Data: ", getData() unloadLib(lib)testPlugin("./libplugin.so") # unix pathtestPlugin("./libplugin.dylib")
$ nim c --app:lib plugin$ nim c -r appPlugin Setup!Plugin Data: 123
nimcall其实就是fastcall.
如果想使用nim来写dll可以参考:
代码转自