Tag: ffi

尝试从cpp dll获取多于500kb的text / json数据时,节点崩溃

// cpp代码 ifstream myfile; myfile.open("D:\Spot\data\simpledata.txt"); string content((std::istreambuf_iterator(myfile)), (istreambuf_iterator())); myfile.close(); char* chr = &content[0]; return char; //节点代码 var libSpotcolor = ffi.Library(fileName, { 'test': ["char *", []] }); var testdata =libSpotcolor.test(); // Here node is crashing console.log(testdata); var save_json = testdata.readCString(); 我可以得到更多的1 MB的数据,如果不是有任何替代方式来得到这个?

我怎样才能解决`错误:无法find绑定文件.`使用`node-ffi`时?

一些细节: Mac OSX 10.11.6 节点v6.5.0 npm v3.10.3 nvm v0.29.0 我最近build立了一个使用ffi与共享C库交互的npm包。 这个软件包完全可以自己完成(使用babel构build)。 我试图将其整合到一个概念validation应用程序中,并遇到了很多 bindings问题。 我正在使用webpack捆绑我的POC应用程序,这就是我遇到这个问题的地方。 这是我的webpack.config.js : /* eslint-disable */ var webpack = require('webpack'); var path = require('path'); var HtmlWebpackPlugin = require('html-webpack-plugin'); var buildPath = path.resolve(__dirname, 'wp-build/'); module.exports = [ { name: 'frontend', entry: './src/frontend/index.js', output: { path: buildPath, filename: 'frontend.bundle.js', }, module: { loaders: [{ […]

使用Node.js FFI绑定数据(javascript&c)

我正在使用节点ffi来调用ac库,我有一些使用此代码的问题: 这个程序在当前目录下创build一个文件夹,如果没有错误,返回1。 #include <stdint.h> #include <stdio.h> #include <sys/stat.h> int create(int dir) { int id; id = mkdir(dir, S_IRWXU); if (id == -1) return 1; else return 2; } 我用来调用这个C程序的JavaScript代码是: var FFI = require("../lib/ffi"); var libsender = new FFI.Library("./libsender", {"create": [ "int", [ "int" ] ] }); if (process.argv.length < 3) { console.log("Arguments: " + process.argv[0] […]

节点FFI包装函数在同步使用时失败,但asynchronous工作

我试图用Node FFI来包装一个Rust库(暴露一个C API)。 我有以下代码包装两个函数。 一个是返回指针的“构造函数”。 另一个需要一个指针并返回Cstring。 var libcomm = ffi.Library('lib/c_api/target/debug/libcomm', { 'comm_address_for_content': ['pointer', ['string']], 'comm_address_to_str': ['string', ['pointer']] }); 当我使用comm_address_to_str的asynchronous调用时,响应是正确的。 但是,当我尝试使用同步样式调用该函数时,它将返回垃圾,或者非常非常less,正确的结果。 以下nodeunittesting将执行该场景: const comm = require("../").libcomm; exports.testAddressForContent = function (test) { const ptr = comm.comm_address_for_content('test'); const result = comm.comm_address_to_str(ptr); test.equal(result, 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3'); // always fails console.log('sync', result); // random garbage comm.comm_address_to_str.async(ptr, function(err, result) { test.equal(result, 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3'); // […]

试图在Electron中使用ffi是致命的错误

我用npm install ffi –save-dev然后,在我的电子应用中使用它: const {app, Menu, Tray, BrowserWindow} = require('electron'); const path = require('path') const url = require('url') const ffi = require('ffi'); console.log('ffi:', ffi); 但它会抛出这个错误,图像 – 图像input: A JavaScript error occurred in the main process Uncaught Exception: Error: A dynamic link library (DLL) initialization routine failed. \\?\C:\UserS\MercuriuS\DocumentS\GitHub\NativeShot\src\e|ectror\\nodeimo…\binding.node at Error (native) at process.rnodule.(anonyrnous function) [as […]

将jscallback函数传递给另一个线程调用的ffi函数是否安全?

说我有一个C函数,它需要一个callback,并在另一个线程上调用它: void call_in_new_thread(void (*callback)()) { // spawn a new thread and call `callback` in it … } 现在我想通过Node-FFI从javascript调用这个函数,并传递一个javascript函数: var callbackType = 'pointer' var lib = ffi.Library('mylib', { 'call_in_new_thread': [ 'void', [ callbackType ] ], }) var callback = ffi.Callback('void', [ 'void' ], function() { // which thread I'm in now? console.log("hello!") }) lib.call_in_new_thread(callback) 我的问题:有效吗? 线程安全吗? […]

如何从Node.js调用C ++代码?

我目前正在开发一个在服务器上运行的模拟器,并且应该在浏览器中显示数据。 为了提供文件,通信和类似的东西,我想使用Node.js. 但是,我不确定它是否能像计算部门那样执行,所以我想用C ++来开发模拟部分。 仿真分为独立的“世界”,这些世界都以一些初始参数开始。 做这个的最好方式是什么?