问题标签 [node-ffi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
21880 浏览

javascript - 为什么 EnumPrintersA 和 EnumPrintersW 请求相同数量的内存?

我使用node-ffi调用EnumPrintersA / EnumPrintersW函数来获取可从我的 PC 访问的本地打印机列表。 您应该创建将由 EnumPrinters 函数填充信息的缓冲区。 但是您不知道所需的缓冲区大小。 在这种情况下,您需要执行EnumPrintersA / EnumPrintersW两次。 在第一次调用期间,此函数计算有关打印机信息的内存量,在第二次调用期间,此函数用有关打印机的信息填充缓冲区。如果是EnumPrinters 的 Unicode 版本




功能,打印机名称中的每个字母将在 Windows 中使用两个字符进行编码。

为什么第一次调用EnumPrintersW返回与第一次调用EnumPrintersA相同的所需内存量?
Unicode 字符串的长度是非 Unicode 字符串的两倍,但所需的缓冲区大小相同。

https://msdn.microsoft.com/ru-ru/library/windows/desktop/dd162692(v=vs.85).aspx

https://msdn.microsoft.com/ru-ru/library/windows/desktop/dd162847(v=vs.85).aspx

0 投票
0 回答
621 浏览

javascript - DLL 返回结构 - 如何使用 node-ffi 读取它?

文件中有一个结构.h

typedef

和我要调用的函数的标题:

我试图用 调用这个函数node-ffi,所以我做了:

调用函数usbLib.usb_relay_device_enumerate()返回 buffer <Buffer@0x000002AB786E2100 28 21 6e 78 ab 02 00 00 40 24 bd 99 fb 7f 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00>,但我不知道如何将此结果转换为 javascript 对象,并读取serial_numberdevice_path属性。

0 投票
3 回答
2603 浏览

javascript - 在 Node-FFI 中使用 SendInput

我想使用 FFI 包在 nodejs 中的 windows Api 中使用 SendInput 函数。

我对 C 的了解有限,所以我无法真正弄清楚我有什么问题,我基本上是在尝试虚拟地按下键盘上的一个键。

这就是我的代码:

它在控制台中记录了我一个“1”,这不应该意味着它有效吗?因为我打开记事本时没有按下键。

0 投票
0 回答
384 浏览

node.js - 用 Rust 编写的 Node.js 扩展中的内存泄漏

我正在用 Rust 编写一个 Node.js 扩展。我从 C 中调用了这个玩具库,用 Valgrind 进行了检查,没有发现内存泄漏。

我从 Python 和 Ruby 中调用了同一个库,在无限循环中运行,并且没有看到内存泄漏的迹象。(由于这里的声誉不足,我无法发布图片)。

当从 Node.js 调用同一个库时,内存使用量似乎随时间增加:Node.js 模块的内存使用情况

时间单位是循环的周期,而不是实时。

下面是 Rust 代码:

这是原始的 Node.js 代码:

一些信息:

  • 操作系统:Debian GNU/Linux (Jessie)
  • Node.js:7.2.0
  • 节点gyp:7.2.0
  • 菲:2.2.0
  • 参考:1.3.3
  • 锈:1.13.0

我用 C 重写了同一个库:

我还将 Node 的版本从 7.2.0 更改为 7.3.0。以下是具有 C 和 Rust 实现的 Node.js 模块的内存使用情况:

Rust 和 C 中 Node.js 模块的内存使用情况

我在不更改 Node.js 代码的情况下尝试了一个无操作库,发现一些令我惊讶的东西:

Rust、C 和 no-op 的 Node.js 模块的内存使用情况

0 投票
1 回答
389 浏览

c++ - How to use C++ api in nodejs?

I would like to use the C++ API of a project from Node and I can't change the C++ code.
I looked at node-ffi but it doesn't seems to be able to work with C++ namespace and classes.

Do you know any other way?

0 投票
1 回答
2557 浏览

node.js - 尝试在 Electron 中使用 ffi 是致命的错误

我安装ffi了,npm install ffi --save-dev然后在我的电子应用程序中使用它,如下所示:

但它会抛出这个错误,图像 -

打印出来的图片:

有谁知道如何让它工作?

我在 Windows 上,所以我什至尝试过 - https://github.com/nodejs/node-gyp#installation

但这并不能解决问题。

0 投票
1 回答
576 浏览

winapi - 使用节点 ffi 调用 setDllDirectory

我正在使用节点 ffi 模块来调用我自己的 dll 中的本机 Windows 函数。我的 dll 依赖于同一目录中的其他一些第三方 dll。

问题是加载后调用时引用我的dll

它无法找到 myLibrary 依赖的第三方 dll,尽管它们位于同一目录中。我试图通过执行以下操作在此行之前调用 setDllDirectory:

然后调用 setdl。但是我在上面的 setdl 行中遇到错误:

我怎样才能解决这个问题?

0 投票
3 回答
2459 浏览

javascript - 动态符号检索错误:Win32 错误 127 - 即使在导入自身进程时

node Foreign Function Interface 中最基本的示例是atoi通过从 node 自己的进程加载来调用:

但我得到这个错误:

显然它与 32/64 位不兼容无关,因为我正在访问自己的进程。那么究竟有什么问题呢?

  • 平台:Windows 7x64
  • 节点:v6.2.2
  • 菲:2.2.0
  • 参考:1.3.3
0 投票
0 回答
564 浏览

node.js - node-ffi - 打印从 C++ 函数返回的字符串

我有一些类 MyObject

我在 getCharOne 函数中得到打印,但不是从控制台日志中得到。

任何帮助将不胜感激

0 投票
1 回答
1314 浏览

json - 如何从 NodeJS 中的 Rust FFI 函数返回字符串值?

我想生成 6 个随机数,将它们推送到一个向量上,然后rustc_serialize将该向量编码为 JSON 字符串以供 NodeJS 使用。

此代码编译为库generate_6_rand.dll。我有一个单独的二进制文件,用于测试此代码。

如果我跑

输出:

然后我.dll在 NodeJS 程序中使用我的:

测试

console.log(lib.generate())

输出:

它是一个 EcmaScriptArrayBuffer吗?

console.log(new ArrayBuffer(lib.generate())

输出:

它的原链属性是什么?

console.log(lib.generate().__proto__)

输出:

将代码更改为:

输出:

为什么 FFI 函数没有像我预期的那样返回 JSON 字符串?