外部ライブラリ†
6 個の関数。
LOADLIB†
書式†
LOADLIB(path)
引数†
| Parameter | Description |
|---|---|
| path | 読み込むDLL、またはSAORI-basicの実行ファイル(Tc604-1以降)のパス。YAYAのディレクトリからの相対パス、または絶対パスで指定する |
戻り値†
- 1: 読み込み成功
- 2: すでに読み込み済み
- 0: 読み込み失敗
解説†
外部ライブラリ(DLL)ファイルを読み込みます。初回呼び出し時のみLoadLibraryを実行し、ロード関数を呼び出します。読み込む外部DLLはYAYAと同じインターフェース(load/unload/request関数のエクスポート)を持つ必要があります。
SAORI-basic†
Tc604-1以降、DLL以外のファイルを指定すると、SAORI-basic(コマンドライン引数を受け取り、標準出力に結果を書く実行ファイル)として扱います。DLLかどうかは拡張子で判断します。
- Windows:
.dllと拡張子なし以外(.exeなど) - POSIX 環境:
.dll.so.dylib.bundle以外(拡張子なしを含む)
読み込み時は、ファイルがあるか(POSIX 環境では実行できるかも)を確かめるだけで、実行はしません。REQUESTLIB に SAORI/1.0 の要求を渡すたびに、YAYA が実行ファイルを起動して応答を作ります。proxy_ex.dll などは要りません。
EXECUTE SAORI/1.0: Argument0, Argument1, ... をそのまま1つずつのコマンドライン引数にして起動します(空白や"を含む引数も分かれません。POSIX 環境ではシェルを通しません) - 作業ディレクトリは実行ファイルのあるディレクトリ。標準入力と標準エラー出力はつながりません - 標準出力の末尾の改行を除き、Result に行を\r\nの4文字でつないだもの、Value0, Value1, ... に1行ずつを入れて200 OKを返します。出力が空なら204 No Contentです - 10秒で終わらないか、出力が16MBに達したら、プロセスを強制終了して500 Internal Server Errorを返します。起動に失敗したときも 500 です - SecurityLevel が local でない要求は400 Bad Requestで断りますGET Version SAORI/1.0: YAYA が200 OKを返します
引数と標準出力の文字コードは CHARSETLIBEX の設定に従います。既定は他のSAORIと同じく charset.extension ですが、POSIX 環境のSAORI-basicだけは UTF-8 です。Windows では引数は文字コードによらず Unicode のまま渡ります。
互換性†
- YAYA: 初期バージョンより使用可能
- AYA: バージョン5.8以降で使用可能
- Tc604-1: SAORI-basic の実行ファイルを読み込めるようにした
関連項目†
UNLOADLIB†
書式†
UNLOADLIB( path )
引数†
| Parameter | Description |
|---|---|
| path | DLLのパス。YAYAのディレクトリからの相対パスまたは絶対パス |
戻り値†
VOID(戻り値なし)
解説†
外部ライブラリ(DLL)をアンロードする。最初の呼び出し時にアンロード操作を実行し、その後FreeLibraryを行う。
外部ライブラリDLLは、YAYA自身と同じインターフェース(load/unload/request関数のエクスポート)を持っている必要がある。
別のスレッド(THREADSTART)が REQUESTLIB でそのライブラリを呼び出している最中は、アンロードせずに警告 W0013 を出す。呼び出しが終わってから、もう一度 UNLOADLIB すればよい。
互換性†
- YAYA: 初期バージョンより
- AYA: 5.8以降
- Tc608-1: ほかのスレッドが呼び出し中のライブラリは、アンロードしないようにした
関連項目†
REQUESTLIB†
書式†
REQUESTLIB( path , string )
引数†
| Parameter | Description |
|---|---|
| path | DLLの位置。YAYAのある位置からの相対パス、または絶対パス。 |
| string | request関数に渡す文字列 |
戻り値†
- 成功: request関数が生成した文字列
- 失敗: VOID(何も返さない)
解説†
事前にロードされた外部ライブラリのrequest関数を呼び出し、その結果を取得します。外部ライブラリのDLLは、YAYAと同じインターフェース(load/unload/request関数のエクスポート)を持つ必要があります。
Tc604-1以降、LOADLIB で読み込んだSAORI-basicの実行ファイルを指定すると、YAYA が実行ファイルを起動して SAORI/1.0 の応答を返します(詳細)。
スレッドとの関係†
応答の遅い外部ライブラリを待つ処理は、THREADSTART で起動したスレッドから呼ぶと、待っている間も SSP からの request や他のスレッドが止まりません。
- 外部ライブラリは同時に1つのスレッドからしか呼べないものとして、同じライブラリへの呼び出しは順番に実行されます。ほかのスレッドが同じライブラリを呼び出している間は、その終わりを待ってから呼び出します。違うライブラリ同士は同時に呼び出せます
- 呼び出し中のライブラリを別のスレッドが UNLOADLIB しても、解放されません(警告 W0013)
- 外部ライブラリは、
THREADSTARTのスレッドの上から呼ばれることになります。COM やウィンドウなど、呼び出すスレッドが決まっている SAORI は、ワーカーから呼ぶと動かないことがあります - 呼び出しの途中では中断できません。THREADSTOP は、その呼び出しが返ってから効きます
互換性†
- YAYA: 初期リリースから使用可能
- AYA: バージョン5.8以降で使用可能
- Tc604-1: SAORI-basic の実行ファイルに対応した
- Tc608-1: 待つ間にほかのスレッドが動けるようにした(
THREADSTARTのスレッドがあるとき)。同じライブラリへの呼び出しを順番にした
関連項目†
FUNCTIONEX†
書式†
FUNCTIONEX( 'path' , 'Argument0', 'Argument1', ... )
引数†
| Parameter | Description |
|---|---|
| path | yaya.dllからの相対パスで、呼び出したいSAORIのパスを指定する。SAORI-universalならDLL、SAORI-basicなら実行ファイル(Tc604-1以降) |
| Argument* | SAORIへの引数。SAORI-basicの場合は実行ファイルのコマンドライン引数になる |
戻り値†
- SAORI-universalの場合: Resultの値を返す。同時に
valueex配列にSAORI-universalのValueデータが格納される - SAORI-basicの場合: 標準出力を返す。複数行のときは行を
\r\nの4文字でつないだものを返し、valueex配列には1行ずつ格納される(Tc604-1以降)
解説†
SAORIモジュール(外部プラグイン)を実行する関数。
システム関数ではなく、システム辞書(yaya_shiori3.dic)で定義された関数で、LOADLIB と REQUESTLIB を使ってSAORIを呼び出す。
SAORI-universalとSAORI-basicの両方に対応している。SAORI-universalの場合、戻り値としてResultが返されるとともに、valueex配列にValueデータが格納される。
SAORI-basicは、Tc604-1以降ではYAYA本体が直接実行するので、実行ファイルのパスをそのまま指定すればよい(POSIX 環境でも動く)。実行のしかたは LOADLIB を参照。
_result = FUNCTIONEX('SAORI\sample.exe', 'はろーわーるど')
それより前のバージョンでは、proxy_ex.dll などのSAORI-universalを経由して呼び出す(pathにproxy_ex.dllのパス、Argument0にSAORI-basicのパス、以降にSAORI-basicへの引数を指定する)。
path が internal_ で始まるとき(internal_crypto など)は、DLLを読み込まず、DIRECTSSTPでベースウェア(SSP 2.9.13以降)の内蔵モジュールを呼ぶ(SAORI over DirectSSTP)。使えないときは0を返す。詳しくは yaya_shiori3.dic を参照。
SAORIの具体的な使い方については、Tips「SAORIの使い方」を参照のこと。
互換性†
- YAYAの初期バージョンから使用可能
- Tc604-1: SAORI-basicの実行ファイルを直接指定できるようにした(それまではproxy_ex.dllなどを経由する必要があった)
関連項目†
CHARSETLIB†
書式†
CHARSETLIB(code)
CHARSETLIB()
CHARSETLIB
引数†
| Parameter | Description |
|---|---|
| code | (省略可)文字コードIDまたは文字コードを表すテキストで文字エンコーディングを指定する(文字コードの名前)。知らない名前なら警告 W0012 を出し、設定を変えない |
戻り値†
引数なしの場合:現在のDLL文字コード設定を文字列で返す 引数ありの場合:VOID(何も返さない)
外部ライブラリとのやり取りに使用する文字コードを設定する。LOADLIBの前に呼び出す必要がある。デフォルトのエンコーディングは設定ファイルの charset.extension エントリ(未指定の場合は charset)から取得される。
CHARSETLIBはすべての外部ライブラリにグローバルに適用されるが、CHARSETLIBEXはライブラリごとの設定が可能。
互換性†
- YAYA: 初版から利用可能。引数省略はTc531以降でサポート
- AYA: バージョン5.8以降
- Tc574-8 / Tc603-1: 知らない文字コードの名前を渡すと、警告 W0012 を出して設定を変えないようにした(それまでは警告を出さずに OS デフォルトとして扱っていた)
関連項目†
CHARSETLIBEX†
書式†
CHARSETLIBEX(path, code)
CHARSETLIBEX(path)
引数†
| Parameter | Description |
|---|---|
| path | DLLファイルの場所。YAYAのディレクトリからの相対パス、または絶対パスで指定する |
| code | (省略可)文字コードIDまたは文字コードを表すテキスト識別子(文字コードの名前)。知らない名前なら警告 W0012 を出し、設定を変えない |
戻り値†
codeを省略した場合:指定したDLLの現在の文字コード設定を文字列で返す codeを指定した場合:VOID(何も返さない)
外部ライブラリとのやり取りに使用する文字コードを個別に指定する。Tc530-2以降、LOADLIBの前に呼び出すことで有効になり、「初期化中」に設定可能。初期化時にあらかじめこの関数で文字コードを指定しておくと良い。デフォルトのエンコーディングは設定ファイルの charset.extension エントリ(未指定の場合は charset)から取得される。ただし POSIX 環境のSAORI-basic(Tc604-1以降)のデフォルトは UTF-8。
互換性†
- YAYA: 初版から利用可能。引数省略機能はTc531以降
- Tc574-8 / Tc603-1: 知らない文字コードの名前を渡すと、警告 W0012 を出して設定を変えないようにした(それまでは警告を出さずに OS デフォルトとして扱っていた)