问题标签 [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 投票
1 回答
75 浏览

meteor - Meteor 在客户端与 node-ffi 集成

我可以在客户端使用 Meteor 和 node-ffi ( https://github.com/node-ffi/node-ffi ) 以允许用户在浏览器上加载本机共享库,使浏览器能够运行该库和将结果返回给服务器?在实践中:用户从浏览器访问站点,单击某个地方,加载库库路径,执行库并将结果返回给服务器。

0 投票
1 回答
1636 浏览

javascript - 使用“node-ffi”时,如何解决“错误:找不到绑定文件。”?

一些细节:

  • Mac OSX 10.11.6
  • 节点 v6.5.0
  • npmv3.10.3
  • nvmv0.29.0

我最近构建了一个npm包,它使用ffi. 该软件包可自行完美运行(使用 构建babel)。我正在尝试将其集成到概念验证应用程序中,并且使用bindings. 我webpack用来捆绑我的 POC 应用程序,这就是我遇到这个问题的地方。

这是我的webpack.config.js

frontend任务从这个 Javascript (ES6) 构建一个包:

console.log('This is the frontend calling!!');

简单吧?

backend任务从这个 Javascript (ES6) 构建一个包:

stack-vod我正在使用的包裹在哪里ffi

这是package.jsonPOC 应用程序的文件:

以下是复制问题的步骤:

  1. npm i
  2. npm run build
  3. node ./wp-build/backend.bundle.js

第 1 步工作正常。保存一些警告,安装npm软件包时没有错误。

步骤 2显示此输出:

步骤 3响应此错误:

我已经尝试了在 SO 和 GH 上找到的大量“修复”,但没有一个奏效。谁能告诉我这里发生了什么以及可以做些什么来解决它?几天来我一直在努力解决这个问题,上周有两个队友也花了几天时间试图弄清楚这一点。

顺便说一句,webpack这是我团队的要求,因为这最终将用于一个更大的项目electron,并且webpack已经被用于在那里构建。所以像“不要使用 webpack”这样的答案不会减少芥末。:)

0 投票
1 回答
765 浏览

node.js - 为什么 `node-ffi` 回调返回一个带有 `void *` 的空 Buffer 而不是 `int *`?

我正在使用node-ffi以下签名实现回调:

底层 C 库void *使用pData. 大约一半的回调实际上返回一个int *值,而另一半pData是更复杂的数据(即Struct)。最终ref.get(pData)成为null. 如果我将Callback定义更改为使用int *而不是void *ref.get(pData)则返回正确的值。我无法弄清楚为什么void *最终是一个大小为 0 的 Buffer不能正确取消引用(即使pData int *)。

我觉得我错过了一些东西,但我一辈子都看不到那会是什么。任何人都可以帮忙吗?

0 投票
2 回答
1354 浏览

node.js - Webpack 因 Node FFI 和 Typescript 失败 - 动态需要错误

在一个简单的 Typescript 程序中,我require使用 Node FFI

进而

通过 webpack 将其链接起来

问题似乎是 FFI 具有动态性require,并且修复似乎是webpack.ContextReplacementPluginwebpack.config.js文件中应用。

这有点超出我的能力范围,但 Angular 案例的一个例子是:

知道如何为 FFI 执行此操作吗?

0 投票
1 回答
1017 浏览

javascript - 使用c ++中的构造函数时ffi的返回类型是什么

最近,我正在研究在 JavaScript 中使用 c++ 函数,我选择了 nodejs 的 ffi 插件。但是我不知道如何在JS中编写一个c++类构造函数的返回类型。

我的 C++ 代码看起来像这样

我的js代码看起来像这样

我尝试使用结构“RectangleType”和指针“RectanglePtrType”,但它们都导致类型错误。我在谷歌找到的所有结果都是关于 LuaJIT 而不是 nodejs。

如果没有我们可以在 Js 中用于 c++ 构造函数的返回类型,我可以在 JS 中创建一个 Rectangle 对象吗?

0 投票
0 回答
130 浏览

node.js - ref.NULL 和 ref.NULL_POINTER 有什么区别?

Node.js 库 'ref' 有两个预定义对象 NULL 和 NULL_POINTER,它们映射到相同的概念(C/C++ 空指针)。两者都是 Buffer 对象,文档实际上并没有解释它们之间的区别。

ref.NULL 对象和 ref.NULL_POINTER 对象有什么区别?你打算什么时候使用一个与另一个?

0 投票
2 回答
1019 浏览

node.js - GetCursorPos 节点 FFI - 如何通过 ref 获取指针返回

我编写了以下代码来设置键盘光标位置。但是捡垃圾。任何线索,我错过了什么?

接下来,我尝试了以下方法,但效果不佳。

0 投票
0 回答
141 浏览

javascript - NW.js - 重新加载页面时“模块未自行注册”

我第一次运行我的 NW.js 应用程序时,模块加载时没有错误(并且可以正常工作)。如果我刷新页面(CTRL+R、F5 或 SHIFT+F5),我会收到错误:Module did not self-register. 这仅在需要ffiref需要时发生。

在 Electron 中它可以正常工作。

有任何想法吗?

这是完整的错误输出:

0 投票
1 回答
1472 浏览

electron - 如何从电子要求本机节点模块?使用 ref 和 ffi 模块出错

当我在我的 js 代码中需要“ref”模块并通过节点运行时,我得到了所需的输出。但是当我通过在 package.json 中提供必要的更改来通过电子运行相同的 js 代码时,它会说“找不到绑定文件..”

这是我的 package.json 文件

这是我的 index.js 文件

当我启动项目“npm start”而不需要“ref”时,我没有收到任何错误。但是当我使用 ref 时,它会引发错误。

PS主要要求是“ffi”模块,我已经完成了运行“ffi”所需的必要更改。“ffi”实习生需要“ref”,这样当我通过节点运行包含 ref 的代码时,它可以完美运行..

0 投票
0 回答
699 浏览

node.js - 如何使用带有 `ffi`、`ref-struct` 和 `ref-array` 的复杂数据结构?

我正在开发一个用于ffi与已编译的 C 库进行交互的项目。我试图让一些复杂的数据结构工作,并且在找出在这些数据结构中获取值的正确方法时遇到问题。我有两个例子我想弄清楚。我不是C 人,所以我在这方面发挥了作用。

实例 1

有一个 Cstruct包含一些属性,这些属性看起来像指向字符数组的指针。这是定义的 C 代码struct

现在,我已经能够成功提取E_CALL_STATE属性,BOOL但我很难将字符串存储在cPhoneNumbercNamecCallIdcPreviousCallId. 这是我使用它进行设置的方式ref-struct

这是解释这一点的Javascript struct(供参考,RPC_CALL_STATE是外部定义的enum):

如果我查看存储在 上的值callProgressStruct.cPhoneNumber,我会得到0。所以,有几个问题:

  • 在这里使用什么是正确ref.types的?
    • 是否char正确?
    • 如果不是,这应该是什么?
  • 如何提取存储在中的实际字符串值cPhoneNumber
  • 有没有办法在ref-array这里使用?

实例 2

我有一个struct这样定义的C:

在这段代码中,*pDevices最终成为一个AUDIO_OS_DEVICE结构数组。这些结构在 C 中定义为:

在 Javascript 我有这个设置使用ref-struct

不知道pDevices要在这里转换什么类型,也不知道如何提取AUDIO_OS_DEVICE结构数组。我遇到了已经用字符数组描述的问题。

任何帮助,将不胜感激。在我弄清楚这一点之前,我处于死胡同。