首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nim dll中的加载函数

Nim dll中的加载函数
EN

Stack Overflow用户
提问于 2016-06-21 17:18:07
回答 1查看 1.2K关注 0票数 3

我有两份文件:

foo.nim

代码语言:javascript
复制
 proc double*(x: cint): cint
    {.cdecl, exportc: "double", dynlib.} =
    return x * 2

bar.nim

代码语言:javascript
复制
proc double(x: cint): cint
  {.cdecl, dynlib: "foo.dll", importc.}

echo double(2)

我通过运行生成foo.nimnim c --app:lib foo.nim来编译foo.dll。当我运行bar.nim时,我希望它从foo.dll加载double并打印4,但是我得到了以下错误:

代码语言:javascript
复制
could not import: double

dllexp.exe只显示NimMainInner,因此该函数甚至不被导出。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-20 12:49:55

double是C中的保留字,nim编译"double“函数如下所示:

代码语言:javascript
复制
extern "C" __declspec(dllexport) int double(int x0);

vcc可以编译这样的代码,但是gcc不能编译。但是有一个解决方案可以在链接阶段重命名“双重”符号。

代码语言:javascript
复制
proc double*(x: cint): cint
    {.cdecl, exportc: "_double", dynlib.} =
    return x * 2

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

得到的dll将具有原始的"_double“和”双“符号。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37950722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档