SAORIを作る
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*この記事について [#d1b5d013]
この記事は、[[SAORIの仕様書>http://www.boreas.dti.ne.jp/~...
わかりにくければ、ぜひかきなおしてください。
*必要スキル [#ifa058e8]
C++ で ダイナミック リンク ライブラリ(dll)をビルドできる...
*前準備 [#jc4171f0]
GlobalAlloc() や GlobalFree() などのWinAPI関数を使う必要...
その宣言を含む、Windows.hをインクルードしておきましょう。
*実装が必要な関数 [#e681a375]
SAORI-universal の作成には、load(),unload(),request()の3...
load() と unload() の2つは、両方実装する・両方実装しない...
load() と unload() を実装する場合、SAORIの仕様上、ゴース...
**load() [#f5d82bbf]
SAORIが読み込まれる際に一番最初に呼び出される関数です。
(DllMainなどのDLL エントリポイント関数を実装しているので...
宣言:
extern "C" __declspec(dllexport) BOOL __cdecl load(HGLO...
説明:
SAORIが呼び出した際に呼び出されます。
SAORIはここで初期化を行うのが望ましいようです。
引数:
HGLOBAL h
SAORIのあるフォルダの絶対パスが\で終端された文字列への...
SAORIはこれを利用して、同フォルダ以下にあるファイルを...
(このHGLOBALは、char* として扱うことが出来ます。)
このポインタはSAORI側で、GlobalFree() を使って解放する...
long len
h のバイトサイズ。
返り値:
関数のの成否。
FALSEが返った場合、SAORIのロードに失敗したと判断するこ...
注意:
h をGlobalFree() で開放しない場合、メモリリークが発生し...
**unload() [#df4b2fb5]
SAORIが解放される際に最後に呼び出される関数です。
宣言:
extern "C" __declspec(dllexport) BOOL __cdecl unload();
説明:
SAORIのアンロード時に呼び出されます。
(里々ではゴーストの終了時、里々のアンロードのタイミン...
返り値:
関数の成否。
**request() [#l9e6a2fd]
load() の後と、SAORIの呼び出し時に呼びだされます。
宣言:
extern "C" __declspec(dllexport) HGLOBAL __cdecl reques...
説明:
load() と、SAORIの呼び出し時に呼び出されます。
引数:
HGLOBAL h
リクエスト文字列へのポインタ。
(load() 同様に、char* として扱うことが出来ます。)
このポインタはSAORI側で、GlobalFree() を使って解放する...
long *len
リクエスト文字列のバイトサイズを格納する変数へのポイン...
関数終了時には、返り値の HGLOBAL のバイトサイズを参照...
返り値:
SAORIの実行結果文字列を格納したHGLOBAL。
返り値のHGLOBALを作成するには、GlobalAlloc() を使って確...
GlobalAlloc() の最初の引数(UINT uFlags)には GMEM_FIXE...
注意:
h をGlobalFree() で開放しない場合、メモリリークが発生し...
バージョンチェック時の呼び出しは、load() がない場合にも...
*リクエスト文字列 [#ud160ec8]
リクエスト文字列は次の書式に従った文字列で行われます。
(最初の行(コマンド SAORI/1.0)と最後の行(\r\n)以外は順不...
(コマンド) SAORI/1.0\r\n
SecurityLevel: (セキュリティレベル)\r\n
Argument0: (引数0)\r\n
Argument1: (引数1)\r\n
Charset: Shift_JIS\r\n
Sender: SATORI\r\n
\r\n
**コマンド [#a4a646d4]
GET Version
EXECUTE
このどちらかが入ります。
***GET Version [#c0aed675]
GET Versionは、load()が呼び出された後(loadがない場合でも...
これは、DLLがSAORIであるかを確認しています。(もっと言え...
GET Versionには、
SAORI/1.0 200 OK\r\n\r\n
とだけ返しておけば問題ありません。
また、そうでなければSAORIとして認識されません。
***EXECUTE [#xc72f38d]
こちらは実際にSAORIを呼び出した際に呼び出されます。
Argumentをもとに処理を行い、結果を返すと良いでしょう。
**セキュリティレベル [#gf62f098]
Loca|
External
このどちらかが入ります。
里々の場合、通常はLocalが、外部からスクリプトが入力されて...
一応里々自体は、SSPの開発者モードを有効にした上で、里々で...
**引数 [#re6aad83]
さおりを呼び出した時に使われた引数です。
Argument0から数字は1ずつ増えていきます。
**その他 [#kb529c6b]
CharsetとSenderは、それぞれ里々の場合はこのような固定値に...
Charsetが異なる場合は、この文字列の文字コードも異なること...
逆に、里々専用のSAORIにするのであれば、考慮の必要は無いで...
*返り値の文字列 [#c97aac33]
返り値の文字列も次の書式に従った文字列で行います。
SAORI/1.0 (ステータスコード)\r\n
Result: (返り値)\r\n
Value0: (追加の返り値2)\r\n
Value1: (追加の返り値1)\r\n
Charset: Shift_JIS\r\n
\r\n
**ステータスコード [#zf618f1d]
SAORIの実行が成功したかどうかを返します。
いくつか決まった種類があるので、合うものを使います。
200 OK
正しく実行が完了した。
204 No Content
正しく呼び出しが実行されたが、返り値は無い。
400 Bad Request
呼び出しの不備。リクエスト文字列が正しくない場合や、引数...
500 Internal Server Error
SAORIでエラーが発生し、正常に処理が完了できなかった場合に...
**返り値 [#w1e9af72]
SAORIの返り値です。
例えばssuのsplitは、分割数を返しますが、それがこれに当た...
**追加の返り値 [#i16cb133]
返り値が複数ある場合、Value0から1ずつ増える形で複数の返り...
SAORIの実行後、里々で(S0)などのように取得することが出...
*全体的な注意 [#v286e4e5]
SAORIでメモリ違反などの致命的なエラーが発生した場合やアサ...
//*外部リンク [#h488ef29]
//- [[SAORI/1.0仕様書:http://www.boreas.dti.ne.jp/~sdn/sa...
//冒頭と同じリンクなので非表示
終了行:
#contents
*この記事について [#d1b5d013]
この記事は、[[SAORIの仕様書>http://www.boreas.dti.ne.jp/~...
わかりにくければ、ぜひかきなおしてください。
*必要スキル [#ifa058e8]
C++ で ダイナミック リンク ライブラリ(dll)をビルドできる...
*前準備 [#jc4171f0]
GlobalAlloc() や GlobalFree() などのWinAPI関数を使う必要...
その宣言を含む、Windows.hをインクルードしておきましょう。
*実装が必要な関数 [#e681a375]
SAORI-universal の作成には、load(),unload(),request()の3...
load() と unload() の2つは、両方実装する・両方実装しない...
load() と unload() を実装する場合、SAORIの仕様上、ゴース...
**load() [#f5d82bbf]
SAORIが読み込まれる際に一番最初に呼び出される関数です。
(DllMainなどのDLL エントリポイント関数を実装しているので...
宣言:
extern "C" __declspec(dllexport) BOOL __cdecl load(HGLO...
説明:
SAORIが呼び出した際に呼び出されます。
SAORIはここで初期化を行うのが望ましいようです。
引数:
HGLOBAL h
SAORIのあるフォルダの絶対パスが\で終端された文字列への...
SAORIはこれを利用して、同フォルダ以下にあるファイルを...
(このHGLOBALは、char* として扱うことが出来ます。)
このポインタはSAORI側で、GlobalFree() を使って解放する...
long len
h のバイトサイズ。
返り値:
関数のの成否。
FALSEが返った場合、SAORIのロードに失敗したと判断するこ...
注意:
h をGlobalFree() で開放しない場合、メモリリークが発生し...
**unload() [#df4b2fb5]
SAORIが解放される際に最後に呼び出される関数です。
宣言:
extern "C" __declspec(dllexport) BOOL __cdecl unload();
説明:
SAORIのアンロード時に呼び出されます。
(里々ではゴーストの終了時、里々のアンロードのタイミン...
返り値:
関数の成否。
**request() [#l9e6a2fd]
load() の後と、SAORIの呼び出し時に呼びだされます。
宣言:
extern "C" __declspec(dllexport) HGLOBAL __cdecl reques...
説明:
load() と、SAORIの呼び出し時に呼び出されます。
引数:
HGLOBAL h
リクエスト文字列へのポインタ。
(load() 同様に、char* として扱うことが出来ます。)
このポインタはSAORI側で、GlobalFree() を使って解放する...
long *len
リクエスト文字列のバイトサイズを格納する変数へのポイン...
関数終了時には、返り値の HGLOBAL のバイトサイズを参照...
返り値:
SAORIの実行結果文字列を格納したHGLOBAL。
返り値のHGLOBALを作成するには、GlobalAlloc() を使って確...
GlobalAlloc() の最初の引数(UINT uFlags)には GMEM_FIXE...
注意:
h をGlobalFree() で開放しない場合、メモリリークが発生し...
バージョンチェック時の呼び出しは、load() がない場合にも...
*リクエスト文字列 [#ud160ec8]
リクエスト文字列は次の書式に従った文字列で行われます。
(最初の行(コマンド SAORI/1.0)と最後の行(\r\n)以外は順不...
(コマンド) SAORI/1.0\r\n
SecurityLevel: (セキュリティレベル)\r\n
Argument0: (引数0)\r\n
Argument1: (引数1)\r\n
Charset: Shift_JIS\r\n
Sender: SATORI\r\n
\r\n
**コマンド [#a4a646d4]
GET Version
EXECUTE
このどちらかが入ります。
***GET Version [#c0aed675]
GET Versionは、load()が呼び出された後(loadがない場合でも...
これは、DLLがSAORIであるかを確認しています。(もっと言え...
GET Versionには、
SAORI/1.0 200 OK\r\n\r\n
とだけ返しておけば問題ありません。
また、そうでなければSAORIとして認識されません。
***EXECUTE [#xc72f38d]
こちらは実際にSAORIを呼び出した際に呼び出されます。
Argumentをもとに処理を行い、結果を返すと良いでしょう。
**セキュリティレベル [#gf62f098]
Loca|
External
このどちらかが入ります。
里々の場合、通常はLocalが、外部からスクリプトが入力されて...
一応里々自体は、SSPの開発者モードを有効にした上で、里々で...
**引数 [#re6aad83]
さおりを呼び出した時に使われた引数です。
Argument0から数字は1ずつ増えていきます。
**その他 [#kb529c6b]
CharsetとSenderは、それぞれ里々の場合はこのような固定値に...
Charsetが異なる場合は、この文字列の文字コードも異なること...
逆に、里々専用のSAORIにするのであれば、考慮の必要は無いで...
*返り値の文字列 [#c97aac33]
返り値の文字列も次の書式に従った文字列で行います。
SAORI/1.0 (ステータスコード)\r\n
Result: (返り値)\r\n
Value0: (追加の返り値2)\r\n
Value1: (追加の返り値1)\r\n
Charset: Shift_JIS\r\n
\r\n
**ステータスコード [#zf618f1d]
SAORIの実行が成功したかどうかを返します。
いくつか決まった種類があるので、合うものを使います。
200 OK
正しく実行が完了した。
204 No Content
正しく呼び出しが実行されたが、返り値は無い。
400 Bad Request
呼び出しの不備。リクエスト文字列が正しくない場合や、引数...
500 Internal Server Error
SAORIでエラーが発生し、正常に処理が完了できなかった場合に...
**返り値 [#w1e9af72]
SAORIの返り値です。
例えばssuのsplitは、分割数を返しますが、それがこれに当た...
**追加の返り値 [#i16cb133]
返り値が複数ある場合、Value0から1ずつ増える形で複数の返り...
SAORIの実行後、里々で(S0)などのように取得することが出...
*全体的な注意 [#v286e4e5]
SAORIでメモリ違反などの致命的なエラーが発生した場合やアサ...
//*外部リンク [#h488ef29]
//- [[SAORI/1.0仕様書:http://www.boreas.dti.ne.jp/~sdn/sa...
//冒頭と同じリンクなので非表示
ページ名: