1

ファイルに構造体があり.hます:

struct usb_relay_device_info
{
    char *serial_number;
    char *device_path;
    intptr_t /*enum usb_relay_device_type*/ type;
    struct usb_relay_device_info* next;
};

typedef:

typedef struct usb_relay_device_info *pusb_relay_device_info_t;

呼び出したい関数のヘッダー:

pusb_relay_device_info_t USBRL_API usb_relay_device_enumerate(void);

この関数を で呼び出そうとしているnode-ffiので、次のようにしました。

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

var charPtr = ref.refType(ref.types.char);
var intPtr = ref.refType(ref.types.int);

var deviceInfo = Struct()
var deviceInfoPtr = ref.refType(deviceInfo);
deviceInfo.defineProperty('serial_number', charPtr);
deviceInfo.defineProperty('device_path', charPtr);
deviceInfo.defineProperty('type', intPtr);
deviceInfo.defineProperty('next', deviceInfoPtr);

var pusb_relay_device_info_t =  ref.refType(deviceInfo);

var usbLib = ffi.Library('USB_RELAY_DEVICE_64.dll', {
    'usb_relay_device_enumerate': [pusb_relay_device_info_t, []]
});

関数を呼び出すとusbLib.usb_relay_device_enumerate()buffer が返されますが、この結果を javascript オブジェクトにキャストし、またはプロパティ<Buffer@0x000002AB786E2100 28 21 6e 78 ab 02 00 00 40 24 bd 99 fb 7f 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00>を読み取る方法がわかりません。serial_numberdevice_path

4

0 に答える 0