标签: node-ffi

未捕获错误:模块未自行注册

我尝试将node-vlc与nw.js(v0.12.0-alpha2)一起使用.当我启动我的应用程序没有nw.js它工作,但当我用nw.js启动它时,我收到一个错误:

未捕获的错误:模块没有自行注册.",来源:/home/alexis/Bureau/dev/jukebox/node_modules/vlc/node_modules/ffi/node_modules/bindings/bindings.js(84)

我用nw-gyp尝试了一些命令,但它无法帮助我.我在Ubuntu 14,64位.

javascript node.js node-webkit node-ffi

82
推荐指数
4
解决办法
6万
查看次数

node-ffi与用于访问现有C++功能的节点扩展

我有一些现有的C++代码,可以在独立的C++应用程序中进行数值处理.我现在想在新的node.js应用程序中使用该代码.

研究如何从node.js访问C++代码,有两个选项:

  1. 写一个node.js扩展名
  2. 使用node-ffi

node-ffi似乎是访问现有库的一个很好的选择,但我是否正确地思考如果我使用node-ffi我将不得不编写一个C包装器来使我的C++可访问?(这是我可以通过Visual Studio在Windows上使用简单的测试用例的唯一方法).

对于我的情况,我的源代码已经在C++中,而不是C,在上面两个选项之间选择有哪些注意事项?

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

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

将节点js代码集成到cpp库时出错

我正在尝试node-ffi库来调用cpp代码.

CPP代码

typedef struct{
    char * key,
    char * value
} ContextAttribute;

typedef struct{
    ContextAttribute * attribute,
    int count
} Context;
Run Code Online (Sandbox Code Playgroud)

这用于

Status Init(     
    Handle* handle,       
    const char* id,    
    const char* token, 
    const char* apiKey,
    const char* productname,          
    const char* productVersion,        
    const char* productLanguage,       
    PlatformType platform,             
    const char* userGuid,              
    EventCb eventcb,
    Context * context
);
Run Code Online (Sandbox Code Playgroud)

我通过以下node-ffi javascript代码使用上面的cpp 代码

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

var ContextAttribute = new Struct({
    key: "string", …
Run Code Online (Sandbox Code Playgroud)

c++ node.js node-ffi

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

Node-webkit WinAPI

我正在开发的Windows简单节点的WebKit应用程序(Vista中,7,...),我需要使用一些WinAPI的功能,特别是,RegisterHotKeySendInput,结合全系统热键,并基于该击键.node-webkit没有提供这样的API,所以我想使用node-ffi来调用这些函数.

我是WinAPI开发的新手,所以我读了一些MSDN手册,但发现大多数例子都创建了窗口,消息循环,消息处理程序等等.所以我不太了解,如何从node-webkit正确调用WinAPI,而不创建单独的窗口?

Node-ffi教程没有涵盖这种情况,所以我找到了节点Windows库,但它似乎只是通过节点实现Windows应用程序.

有没有办法在不创建Windows应用程序的情况下实现本机调用?这样做的正确方法是什么?

javascript winapi node.js node-webkit node-ffi

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

从Node-JS将焦点设置为Windows应用程序

我有一个在Windows上运行的NodeJS应用程序,当用户执行某个操作时,需要显示并将焦点切换到正在运行的Windows应用程序.我一直在使用node-ffi包来进行Windows API调用,但却无法使其一致地切换焦点.这是我正在使用的代码.它成功获取正在运行的Calculator应用程序的HWND,但随后尝试将焦点切换到该HWND,它只在以下情况下有效:

    var ffi = require('ffi');   
    var intPtr = ref.refType('long');
    var user32 = new ffi.Library('user32', {
        'FindWindowA': ['long', [ 'string', 'string']],
        'SetForegroundWindow': ['bool', ['long']],
        'BringWindowToTop': ['bool', ['long']],
    });

    var winToSetOnTop = user32.FindWindowA(null,"calculator")
    var res = user32.ShowWindow(winToSetOnTop, 9);
    res = user32.SetForegroundWindow(winToSetOnTop);
    res = user32.BringWindowToTop(winToSetOnTop);   
Run Code Online (Sandbox Code Playgroud)

这些命令的组合似乎与我尝试过的命令最为一致,但它并不是一直有效.如果我想要将焦点切换到的窗口最小化,它将始终弹出到顶部.如果窗口没有最小化,但只是在另一个窗口后面,它将只是间歇性地显示.我不确定如何始终如一地使正在运行的Windows应用程序始终移动到订单的顶部,即使它当前已最小化.

javascript winapi node.js node-ffi

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

Javascript中的C解析器

我想在Javascript中解析C头文件.有没有这样的图书馆?否则,任何提示可以帮助我开始?

更新:我的最终目标是自动构建node-ffi的接口.解析器不一定必须在Javascript中,只要它可以吐出Javascript可理解的格式.如果我自己很难开发,我可能不得不采用现成的解决方案......?

javascript c node.js node-ffi

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

从Node.js调用C++库(Node addons/node-ffi)

我正在尝试将外部C++库(我可以访问.so文件以及头文件)集成到我的Node.js应用程序中.

经过大量研究后,我的选择减少到:

  1. 编写节点插件

  2. 使用node-ffi

从node-ffi的gitHub的定义我无法判断它是否会直接在C++库上运行:

node-ffi是一个Node.js插件,用于使用纯JavaScript加载和调用动态库.它可用于创建与本机库的绑定,而无需编写任何C++代码.

所以我的问题是:

  • 选项1)是否意味着以某种方式重写外部C++库?
  • node-ffi是否能够直接调用C++库而不需要编写任何类型的C包装器?

I'm no expert when it comes to C/C++ so if I missed something basic for you to be able to answer please let me know so I can improve my question.

node.js node-ffi node.js-addon

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

是否可以使用ref-struct和ref-array创建一个结构数组?

我正在使用node-ffi来调用一个函数,该函数将out-param作为指针到指针结构的指针.有没有办法使用ref-struct和ref-array来访问我得到的数组?

struct = require("ref-struct");
var rect_type = struct({
    'x': 'int',
    'y': 'int',
    'width': 'int',
    'height': 'int',
});
var rotation_type = struct({
    'yaw': 'short',
    'pitch': 'short',
    'roll': 'short'
});
var face_type = struct({
    'rect' : rect_type,
    'rotation' : rotation_type,
    'confidence' : 'double'
});
Run Code Online (Sandbox Code Playgroud)

我能够在函数调用之后从指针中获取第一个结构,但是我无法获得数组的其余部分:

var mylib = ffi.Library('lib/libN', {
    'GetFaces' : [ 'int', [ 'pointer' ] ]
});

var pface_type = ref.refType(face_type);
var ppface = ref.alloc(pface_type);

result = mylib.GetFaces(ppface);

face = ppface.deref().deref();

console.log("X:" + face.rect.x + " Y:" + face.rect.y);
Run Code Online (Sandbox Code Playgroud)

有没有办法将参数声明为结构数组?我试过这个,但它不起作用: …

node.js node-ffi

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

将js回调传递给在另一个线程中调用它的ffi函数是否安全?

假设我有一个C函数,它接受一个回调并在另一个线程上调用它:

void call_in_new_thread(void (*callback)()) {
    // spawn a new thread and call `callback` in it ...
}
Run Code Online (Sandbox Code Playgroud)

现在我想通过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)
Run Code Online (Sandbox Code Playgroud)

我的问题:它有效吗?它是线程安全的吗?javascript回调实际执行哪个线程?在node.js主线程中,还是在ffi库创建的线程中?Node-FFI会以某种方式同步呼叫吗?

javascript multithreading node.js node-ffi

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

从 nodejs 加载 DlL 时出现错误“动态符号检索错误:Win32 错误 127”

我想从节点 js 加载一个 dll 文件。这是头文件:

#pragma once
#ifdef __cplusplus
#define EXAMPLE __declspec(dllexport) 

extern "C" {
    EXAMPLE int Add(int, int);
}
#endif
Run Code Online (Sandbox Code Playgroud)

在编译为,我选择“编译为 C 代码”

在主动解决方案平台中,我选择 x64

然后,我使用 ffi 模块加载它:

var ffi = require('ffi');

var Lib = ffi.Library('test', {'Add' : ['int',['int','int']]});
Run Code Online (Sandbox Code Playgroud)

但我得到了一个错误:

C:\Users\TheHai\node_modules\ffi\lib\dynamic_library.js:112
    throw new Error('Dynamic Symbol Retrieval Error: ' + this.error())
    ^

Error: Dynamic Symbol Retrieval Error: Win32 error 127
    at DynamicLibrary.get (C:\Users\TheHai\node_modules\ffi\lib\dynamic_library.js:112:11)
    at C:\Users\TheHai\node_modules\ffi\lib\library.js:50:19
    at Array.forEach (native)
    at Object.Library (C:\Users\TheHai\node_modules\ffi\lib\library.js:47:28)
    at Object.<anonymous> (C:\Users\TheHai\Downloads\Compressed\nodejs-websocket-master\samples\chat\server.js:8:15)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10) …
Run Code Online (Sandbox Code Playgroud)

dll node.js node-ffi

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