perlcall(「コールバックコンテキスト情報を格納するための戦略」セクション)とPerlの拡張と埋め込み(「コールバック」セクション)の両方に、XS/CからのPerlサブルーチンの呼び出しを処理する3つの異なる方法がリストされています。
- すぐに:XS呼び出し
- 延期:後で使用するためにサブ参照をSV*として保存します
- 複数:後で使用するためにn個のサブ参照を保存します
上記の#3の例と詳細では、XSのハッシュを使用してサブ参照を特定のC関数に関連付けていますが、これらは適切ではない固定数のC関数を事前定義しています。
オプションの引数を持つコールバック/関数ポインターを使用するCライブラリへのXSインターフェイスに取り組んでいます。例:
blah(custom_type *o, void (*func) (void *data, int more_data), const void * data);
このライブラリのCblahは、渡されたデータとともに渡された関数を呼び出すことになります。
可能であれば、CAPIからPerlへの1対1のマッピングを行いたいと思います。例えば
blah($o, \&func, $data);
現在、上記の#2がありますが、blah()をもう一度呼び出すと、保存されたSV*が上書きされます。
上記の#3をどのように実装しますか?