【问题标题】:Use ffi (-napi) in NodeJS on Windows在 Windows 上的 NodeJS 中使用 ffi (-napi)
【发布时间】:2021-10-14 05:23:25
【问题描述】:

我正在尝试从节点挂钩到一个 DLL,并且我已经了解了 ffi。我更像是一个 GNU/Linux 人而不是 MS。对我来说,常规的 ffi 包没有正确构建,但 ffi-napi 做到了。我尝试遵循the npm package site 的简单测试例程,该例程与 ceil(double) 挂钩。那里的示例代码链接了我更熟悉的 libm 库,但这不是微软做事的方式。据我所知,这个函数在 msvcrt.dll 中。我在节点应用程序外壳中做了以下操作:

ffi = require('ffi-napi')
msvcrt = ffi.Library('C:\\Windows\\System32\\msvcrt', {'ceil': [ 'double', [ 'double' ] ]})

在第二行按回车后,有很多文本转储到节点外壳,然后应用程序关闭。有人在 Windows 上使用过 ffi 吗?我有什么明显的遗漏吗?

【问题讨论】:

    标签: node.js dll ffi msvcrt


    【解决方案1】:

    我觉得有点傻,但我太精确了。它适用于:

    ffi = require('ffi-napi')
    msvcrt = ffi.Library('msvcrt', {'ceil': [ 'double', [ 'double' ] ]})
    msvcrt.ceil(1.5)
    

    向控制台写入“2”。我想我有点偏执,因为在 Linux 上搜索 /lib 和 /usr/lib 是自动的,但 Windows 很奇怪,它为每个程序提供了自己的目录。我猜 Windows 上的 ffi 确实默认搜索 Windows\System32 目录。

    这也让我担心,因为我不知道为什么一个完全合格的路径会导致它崩溃。如果有人对此有任何意见,我很想听听。

    更新: 我通过以下方式让它与完全合格的路径一起工作:

    msvcrt = ffi.Library('\\Windows\\System32\\msvcrt', {'ceil': [ 'double', [ 'double' ] ]})
    

    所以这允许在同一个“驱动器号”的任何地方访问 DLL(这对我现在的使用来说已经足够了)。如果我找到穿越到不同驱动器的答案,我会再次更新。

    【讨论】:

      猜你喜欢
      • 2021-07-05
      • 1970-01-01
      • 2020-10-15
      • 2021-06-26
      • 2021-07-30
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 2020-06-30
      相关资源
      最近更新 更多