我正在尝试从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);
});
使用正确的userName
和password
弹出C ++ messageBox,这就是我知道dll函数被调用的方式。但是从不调用javascript的alert(data)
。
我使用C ++代码测试了dll,并触发了回调函数。
有什么建议吗?
答案 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);