node-ffiメモ
FFI は Foreign Function Interface の略
外部の関数(DLL, Shared Library)を呼び出すインターフェース
実際のところ、C言語互換のインターフェースのライブラリだけが対象になっている。
node-ffi はもうメンテナンスされていないので使うべからず。
2018年で停止。Node v12 までしか対応していない模様。
node-ffi-napi が代替だったが、既にこれもメンテナンス停止状態。
ffi-napi を Node.js v22.0 でインストールしようとしたが失敗。
node-ffi-rs が現在の代替らしい。
Deno なら API に ffi がある。
Bun なら API に ffi がある。
使い方
ref の API
中身は Buffer
ref.types.* で既存の型の型オブジェクトを取得。
code:js
var myIntType = ref.types.int;
ref.refType(*) で、ポインタ型オブジェクトを取得。
code:js
var myIntPtrType = ref.refType(myInt);
ライブラリの宣言
ffi.Library(ライブラリ名またはパス, { 関数名1: [返り値の型, [引数1の型, 引数2の型, ...] ], 関数名2: ... })
code:js
var myLib = ("myLib", {
});
プリミティブ型なら文字列のままでよい。
値を受け取るための場所を作る
ref.alloc(型名または型オブジェクト)
code:js
var myIntPtr = ref.alloc(myIntPtrType);
ポインタで受け取った値を取得する。
code:js
var myInt = myIntPtr.deref();
インターフェースはとても単純でよくできていると思う。