SAORI連携
SAORIは伺かのプラグイン規格です。外部のDLLを呼び出して、湊だけでは実現できない機能を追加できます。
基本
saori(dll名, 引数0, 引数1, ...) で呼び出します。
戻り値は配列です。
OnBoot => {
let result = saori("hoge.dll", "引数1", "引数2")
湊: 結果は${result[0]}です。
}
DLLの配置
SAORIのDLLはゴーストフォルダに置きます。
ghost/master/
├── shiori.dll
├── config.toml
├── hoge.dll ← SAORIのDLL
└── talks/
└── main.mnt
戻り値
SAORIの戻り値は配列として返されます。 インデックス0が最初の戻り値です。
OnBoot => {
let result = saori("hoge.dll", "引数")
let value0 = result[0]
let value1 = result[1]
}
DLLの読み込みエラー
DLLが見つからない場合や読み込みに失敗した場合、パスが不正(絶対パスや .. を含む)な場合は、
空の文字列が返されます(配列ではありません)。
len(result) は 0 になり、result[0] のように添字でアクセスすると null になって警告が出ます。
このときのエラー(error レベル)は、debug_log の設定に関係なく、SHIORI応答の ErrorLevel / ErrorDescription ヘッダに載ります。
debug_log = true にすると、minato_load.log にも詳細が記録されます。
戻り値が使えたかどうかは、len(result) で確かめてください。
注意
- 湊はSAORIに、引数を UTF-8 で送ります(
Charset: UTF-8)。応答もUTF-8として読みます。Shift_JISへの変換は行いません。 - ただし、DLLを読み込むときにSAORIへ渡すDLLのフォルダのパスは、Shift_JIS(表せない場合はUTF-8)です。
- リクエストの
Charsetヘッダを見ずにShift_JISで処理する古いSAORIに日本語の引数を渡すと、文字化けや誤動作の原因になります。使うSAORIごとに確認してください。詳しくは8. SAORI呼び出しを参照してください。 saori()は、get_property()と合わせて1イベントあたり10回までしか呼べません。11回目以降は呼び出されず、空の配列が返り、警告が出ます。詳しくは外部呼び出しは1イベント10回までを見てください。- DLLは初回呼び出し時に読み込まれ、ゴーストが終了(または再読み込み)されるまで保持されます。ただし、次の場合は例外です。
- 同時に保持できるDLLは32個までです。超えると、最も長く使われていないものから解放されます。
- 応答が5秒以内に返らなかったDLLは、そのゴーストを再読み込みするまで、二度と呼び出されません。
- 1回のイベントの処理中に呼べる回数は、
saori()とget_property()を合わせて10回までです。超えた呼び出しは実行されません。