現在の位置
diff プラグインを使用中
- 追加された行はこの色です。
- 削除された行はこの色です。
- 仕様/拡張/Hook へ行く。
- 仕様/拡張/Hook の差分を削除
*はじめに [#qa5b4ffa]
-鬼斬では,ユーザーによるモジュールを拡張するための仕組みとしてHook と呼ぶ仕組みを用意している.
--Hook は,フェッチやリネームと言ったシミュレータ本来の処理を横取り(フック)するための仕組みである.
--任意のオブジェクトとメソッドのペアをHook に登録することにより,本来の処理を横取りできる.
--Hook を用いることにより,ユーザーはモジュールに直接手を加えることなく,シミュレータの拡張を行える.
--主な実装は/src/Sim/Foundation/Hook/Hook.h にある
*動作 [#r0b48035]
-各箇所に儲けられたHook オブジェクトに対し,
--Register でオブジェクトとメソッドを登録
--Trigger で登録されたメソッドが呼び出される
*使用例 [#m41a1109]
-''2018/02/06追記 最新版の鬼斬では型が異なっており,以下の記述そのままでは動かない.Src/Samples/SampleHookModule.h, SampleNullModule.hを参照のこと.''
-Fetcher によるフェッチをフックする場合について述べる
-以下は,Fetcher で定義されているフックfetchHook に対し,MyFetcher::Fetch を登録する場合の例である.
--メソッドのポインタを登録する際は,MyFetcher::Fetch の様にクラス名を付加しなければならない点に注意
HookPoint<Fetcher> Fetcher::s_fetchHook
//----
MyFetcher
{
public:
void Fetch( HookParameter<Fetcher> param )
{
}
}
//----
MyFetcher myFetcher;
Fetcher::s_fetchHook.Register( &myFetcher, &MyFetcher::Fetch, 0 );