将dll与node-ffi一起使用

时间:2018-10-14 12:28:29

标签: javascript node.js dll node-ffi

我正在使用node-ffi访问由我购买的自定义硬件提供的dll,该dll使用设备驱动程序来执行操作,它们不提供dll文档,但在c#中有一个示例应用程序,该dll是像这样在c#中使用:

[DllImport("POS_CIDR.dll", CharSet = CharSet.Unicode)]
private static extern IntPtr CIDR_Info();
...
result = Marshal.PtrToStringUni(CIDR.CIDR_Info());
...

现在,我尝试使用以下节点代码访问dll的CIDR_Info功能:

var ffi = require('ffi')
var ref = require('ref')
var int = ref.types.int;
    var libprime = ffi.Library('POS_CIDR.dll', {
  'CIDR_Info': [ int ,[]],
});
console.log(libprime.CIDR_Info()); // 73402156

现在我从函数中返回的是一个包含字符串地址的整数,我该如何在节点中将该整数解引用到字符串? 我找不到任何方法来设置节点中的缓冲区的地址。

更新

好的,我发现了如何使用以下代码读取该字符串:

var ffi = require('ffi')
var ref = require('ref')
var stringPtr = ref.refType(ref.types.CString);
var int = ref.types.int
var libprime = ffi.Library('POS_CIDR.dll', {
      'CIDR_Info': [ stringPtr ,[]],      
    });
buf = new Buffer(255);
buf=libprime.CIDR_Info();
console.log(ref.readCString(buf, 0));

现在控制台输出p,它是字符串的第一个字符,如果我将偏移量设置为2,它给出的o,即第二个字符,我认为readCString的编码存在问题在每个字符之后看到一个空字符。 知道如何解决吗?

0 个答案:

没有答案