在Windows上的NodeJS中使用ffi(-napi)

nhaq1z21  于 5个月前  发布在  Node.js
关注(0)|答案(2)|浏览(117)

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

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

字符串
在第二行按回车键后,有很多文本转储到节点shell,然后应用程序关闭。有人在Windows上使用ffi吗?有什么明显的东西我错过了吗?

smtd7mpg

smtd7mpg1#

我觉得有点傻,但我只是太精确了。它的工作与:

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(这对我现在的使用来说已经足够了)。如果我找到了交叉到不同驱动器的答案,我会再次更新这个。

ioekq8ef

ioekq8ef2#

为了在node.js中更好地使用ffi,你可以使用由rust开发的ffi-rs,它为node.js实现了ffi。https://github.com/zhangyuang/node-ffi-rs

相关问题