将JavaScript函数作为函数指针传递给C ++ dll

时间:2018-07-20 21:02:29

标签: javascript c++ function pointers node.js-addon

我正在尝试从node.js调用外部函数,并将另一个函数作为回调传递给它。

我有一个用C ++编写的具有以下功能的dll

cppDll

typedef bool(*Callback)(bool, const char*);

DLL_EXPORT BOOL Connect(const char *userName, const char *password, Callback callback)
{
    MessageBox(0, userName, password, MB_OK);
    callback(true, "User is connected");

    return true;
}

我的js文件如下

ces.js

var path = require('path');
var ffi = require('ffi');
var ref = require('ref');

var constString = ref.types.CString;
var bool = ref.types.bool;

var callback =  ffi.Function(bool, [bool, constString]);

const ces = ffi.Library(path.join(__dirname,"cppDll"), {
    'Connect': [bool, [constString, constString, callback]]
});

module.exports = ces;

main.js

 var ces = require('../ces');

    ces.Connect("user", "Password", function (sec, data) {
        alert(data);
    });

使用正确的userNamepassword弹出C ++ messageBox,这就是我知道dll函数被调用的方式。但是从不调用javascript的alert(data)。 我使用C ++代码测试了dll,并触发了回调函数。 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

尝试使用ffi.Callback,例如:

ces.js

var path = require('path');
var ffi = require('ffi');
var ref = require('ref');

var constString = ref.types.CString;
var bool = ref.types.bool;

const ces = ffi.Library(path.join(__dirname,"cppDll"), {
    'Connect': [bool, [constString, constString, 'pointer']]
});

module.exports = ces;

main.js

var ces = require('../ces');
var ffi = require('ffi');
var ref = require('ref');

var constString = ref.types.CString;
var bool = ref.types.bool;

var callback = ffi.Callback(bool, [bool, constString], function (sec, data) {
    alert(data);
});

ces.Connect("user", "Password", callback);