我有两份文件:
foo.nim
proc double*(x: cint): cint
{.cdecl, exportc: "double", dynlib.} =
return x * 2bar.nim
proc double(x: cint): cint
{.cdecl, dynlib: "foo.dll", importc.}
echo double(2)我通过运行生成foo.nim的nim c --app:lib foo.nim来编译foo.dll。当我运行bar.nim时,我希望它从foo.dll加载double并打印4,但是我得到了以下错误:
could not import: doubledllexp.exe只显示NimMainInner,因此该函数甚至不被导出。
如何从dll导入double函数?我计划从多个dll中加载具有相同名称的函数,因此可以处理这个问题的解决方案将是首选的。我正在Windows 7上运行这个程序。
发布于 2016-07-20 12:49:55
double是C中的保留字,nim编译"double“函数如下所示:
extern "C" __declspec(dllexport) int double(int x0);vcc可以编译这样的代码,但是gcc不能编译。但是有一个解决方案可以在链接阶段重命名“双重”符号。
proc double*(x: cint): cint
{.cdecl, exportc: "_double", dynlib.} =
return x * 2
{.emit: """
#pragma comment(linker, "/export:double=_double")
""".}得到的dll将具有原始的"_double“和”双“符号。
https://stackoverflow.com/questions/37950722
复制相似问题