在 Nim dll 中加载函数

Load function in Nim dll

我有两个文件:

foo.nim:

 proc double*(x: cint): cint
    {.cdecl, exportc: "double", dynlib.} =
    return x * 2

bar.nim:

proc double(x: cint): cint
  {.cdecl, dynlib: "foo.dll", importc.}

echo double(2)

我通过运行宁nim c --app:lib foo.nim编译foo.nim,生成foo.dll。当我 运行 bar.nim 时,我希望它从 foo.dll 加载 double 并打印 4,但我收到此错误:

could not import: double

dllexp.exe 只显示 NimMainInner,所以函数甚至没有导出。

如何从 dll 中导入 double 函数?我计划从多个 dll 加载可能具有相同名称的函数,因此首选可以处理该问题的解决方案。我在 运行 上 Windows 7.

double 是 C 中的保留字。而 nim 将 "double" 函数编译成这样:

extern "C" __declspec(dllexport) int double(int x0);

不知何故 vcc 可以编译这样的代码,但是 gcc 不能。 但是有一个解决方案可以在 link 阶段

期间重命名 "double" 符号
proc double*(x: cint): cint
    {.cdecl, exportc: "_double", dynlib.} =
    return x * 2

{.emit: """
#pragma comment(linker, "/export:double=_double")
""".}

生成的 dll 将具有原始的“_double”和 "double" 个符号