используя dll с node-ffi - PullRequest
       20

используя dll с node-ffi

0 голосов
/ 14 октября 2018

Я использую node-ffi для доступа к dll, поставляемому с пользовательским оборудованием, которое я купил, dll использует драйвер устройства для выполнения каких-либо задач, они не предоставляют dll docs, но у них есть пример приложения на c #, dllиспользуется в c # следующим образом:

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

теперь я пытаюсь получить доступ к CIDR_Info функции dll со следующим кодом узла:

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 видит нулевой символ после каждого символа.есть идеи как это исправить?

...