标签: node-ffi

来自 C++ 线程的节点 FFI 回调

我今天遇到了一个令人沮丧的问题。我正在node-ffi我的电子应用程序中运行 C++ 代码。总的来说,我有很好的经验,但我今天开始使用多线程并遇到了一些困难。我传入的回调ffi是从线程调用的。然而,当我结束循环并尝试将join循环线程连接到主线程时,它完全冻结了电子应用程序。

完整免责声明:我对 C++ 还很陌生,并且希望对我的代码提供任何反馈以改进它,特别是您认为我应该注意的任何危险信号。

以下两个存储库演示了我遇到的错误:
Electron Project - https://github.com/JakeDluhy/threading-test
C++ DLL - https://github.com/JakeDluhy/ThreadedDll

以下是我正在做的事情的概述:
在我的 dll 中,我公开了开始/结束会话和开始/停止流式传输的函数。它们调用类实例的引用来实际实现功能。本质上,它是更强大的 C++ 类的 C 包装器。

// ThreadedDll.h
#pragma once

#ifdef __cplusplus
extern "C" {
#endif

#ifdef THREADEDDLL_EXPORTS
#define THREADEDDLL_API __declspec(dllexport)
#else
#define THREADEDDLL_API __declspec(dllimport)
#endif
    THREADEDDLL_API void beginSession(void(*frameReadyCB)());
    THREADEDDLL_API void endSession();

    THREADEDDLL_API void startStreaming();
    THREADEDDLL_API void stopStreaming();
#ifdef __cplusplus
}
#endif

// ThreadedDll.cpp
#include "ThreadedDll.h"
#include "Threader.h"

static Threader *threader = NULL;

void beginSession(void(*frameReadyCB)())
{
    threader …
Run Code Online (Sandbox Code Playgroud)

javascript c++ multithreading node-ffi electron

4
推荐指数
1
解决办法
2474
查看次数

nodejs应用程序在Windows机器中给出错误"%1不是有效的Win32应用程序"

我的Nodejs应用程序在ubuntu中运行正常.当我尝试在Windows机器中部署相同时,它显示以下错误.

=>node server.js  
D:\home\site\wwwroot
D:\home\site\wwwroot\node_modules\ffi\node_modules\bindings\bindings.js:83
        throw e                  ^
Error: %1 is not a valid Win32 application.   
D:\home\site\wwwroot\node_modules\ffi\node_modules\ref\build\Release\binding.node
    at Error (native)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at bindings 
Run Code Online (Sandbox Code Playgroud)

我删除了ffi模块,并在Windows机器上再次尝试npm install ffi它也没有工作.

 => npm install ffi
D:\home\site\wwwroot
npm WARN package.json @ No description
npm WARN package.json @ No repository field.
npm WARN package.json @ No README data
npm WARN package.json @ No license field.
gyp ERR! build error 
gyp ERR! stack Error: `msbuild` failed with …
Run Code Online (Sandbox Code Playgroud)

windows azure node.js npm node-ffi

3
推荐指数
1
解决办法
8655
查看次数

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

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

extern crate rand;
extern crate rustc_serialize;

use rand::{OsRng, Rng};
use rustc_serialize::json::{self, Json, ToJson};

#[no_mangle]
pub extern "C" fn generate() -> String {
    let choices: [u8; 6] = [1, 2, 3, 4, 5, 6];

    let mut rand_vec: Vec<u8> = Vec::new();

    let mut rng = match OsRng::new() {
        Ok(t) => t,
        Err(e) => panic!("Failed to create OsRng!, {}", e),
    };

    for _ in 0..5 {
        rand_vec.push(*rng.choose(&choices).unwrap());
    }

    json::encode(&rand_vec).unwrap()
}
Run Code Online (Sandbox Code Playgroud)

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

如果我跑

println!("{:?}", …
Run Code Online (Sandbox Code Playgroud)

json node.js rust node-ffi

3
推荐指数
1
解决办法
1132
查看次数

NodeJS-C 接口

我试图弄清楚如何在 C 库和 NodeJS 模块之间传递数据。我可以通过 NodeFFI 模块执行此操作吗?

或者我是否必须编写自己的 NodeJS 插件来开发 C-NodeJS 接口?

c node.js node-ffi node.js-addon

1
推荐指数
1
解决办法
1639
查看次数

在 Node-FFI 中使用 SendInput

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

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

这是我的代码:

var ffi = require('ffi');
var ref = require ('ref');
var struct = require ('ref-struct');

var keyboardInput = struct({
    'type': 'int',
    'wVK': 'int',
    'wScan': 'int',
    'dwFlags': 'int',
    'time': 'int',
    'dwExtraInfo': 'int64'
});

var keyboardInputPtr = ref.refType(keyboardInput);
var keyboard = new keyboardInput();
keyboard.type = 1;
keyboard.wVK = 0x41;
keyboard.wScan = 0;
keyboard.dwFlags = 2;
keyboard.time = 0;
keyboard.dwExtraInfo = 0;

var user32 = ffi.Library('user32', {
    'SendInput': [ 'int', …
Run Code Online (Sandbox Code Playgroud)

javascript c winapi node.js node-ffi

1
推荐指数
2
解决办法
2055
查看次数